如何将main方法中的TutorialWebsite类型ArrayList传递至其他类方法并按属性排序
嘿,这事儿不难办!我来给你一步步拆解怎么把main里的ArrayList<TutorialWebsite>传给另一个类做排序:
第一步:把集合传递给另一个类的方法
首先你得在另一个类(比如叫WebsiteSorter)里定义一个能接收ArrayList<TutorialWebsite>的方法,静态或非静态都可以,看你的需求:
public class WebsiteSorter { // 静态方法:不用创建类实例就能直接调用 public static void sortByLanguage(ArrayList<TutorialWebsite> tutorials) { // 这里放排序逻辑 } // 非静态方法:需要先创建WebsiteSorter对象才能调用 public void sortByDescription(ArrayList<TutorialWebsite> tutorials) { // 这里放排序逻辑 } }
然后回到你的main方法里,直接调用这个方法就行:
public static void main(String[] args) { ArrayList<TutorialWebsite> tutorial = new ArrayList<>(); // 省略读取文件填充集合的代码... // 调用静态排序方法 WebsiteSorter.sortByLanguage(tutorial); // 或者调用非静态排序方法 WebsiteSorter sorter = new WebsiteSorter(); sorter.sortByDescription(tutorial); }
第二步:实现具体的排序逻辑(两种常用方案)
排序的核心是定义比较规则,这里给你两种最常用的方式:
方案一:用Comparator(灵活,不用修改原类)
如果不想改动TutorialWebsite类本身,用Comparator可以自定义各种排序规则,比如按语言名称忽略大小写排序:
public class WebsiteSorter { public static void sortByLanguage(ArrayList<TutorialWebsite> tutorials) { // Java 8之前的写法 Collections.sort(tutorials, new Comparator<TutorialWebsite>() { @Override public int compare(TutorialWebsite t1, TutorialWebsite t2) { return t1.getLanguageName().compareToIgnoreCase(t2.getLanguageName()); } }); // Java 8+ 可以用Lambda简化成一行 // tutorials.sort((t1, t2) -> t1.getLanguageName().compareToIgnoreCase(t2.getLanguageName())); } }
方案二:让TutorialWebsite实现Comparable(适合固定排序规则)
如果这个类默认就需要按某个属性排序(比如语言名称),可以让它实现Comparable接口:
public class TutorialWebsite implements Comparable<TutorialWebsite> { private String languageName; private String websiteDescription; // 省略getter、setter方法... @Override public int compareTo(TutorialWebsite other) { // 默认按语言名称升序排序 return this.languageName.compareToIgnoreCase(other.languageName); } }
这种情况下,排序方法就非常简洁了:
public class WebsiteSorter { public static void sortTutorials(ArrayList<TutorialWebsite> tutorials) { Collections.sort(tutorials); } }
完整整合示例
把这些代码整合到你的项目里,大概是这样的:
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; public class Main { public static void main(String[] args) { ArrayList<TutorialWebsite> tutorial = new ArrayList<>(); File tutorialsFile = null; Scanner infile = null; try { tutorialsFile = new File("Tutorials.txt"); infile = new Scanner(tutorialsFile); while(infile.hasNext()){ TutorialWebsite newTut = new TutorialWebsite(); newTut.setLanguageName(infile.nextLine()); newTut.setWebsiteDescription(infile.nextLine()); // 补充其他属性的setter逻辑 tutorial.add(newTut); } } catch(FileNotFoundException e){ e.printStackTrace(); } finally { // 别忘了关闭输入流! if (infile != null) { infile.close(); } } // 调用排序方法 WebsiteSorter.sortByLanguage(tutorial); // 测试输出排序结果 for (TutorialWebsite tut : tutorial) { System.out.println(tut.getLanguageName() + ": " + tut.getWebsiteDescription()); } } } class TutorialWebsite { private String languageName; private String websiteDescription; // Getter和Setter方法 public String getLanguageName() { return languageName; } public void setLanguageName(String languageName) { this.languageName = languageName; } public String getWebsiteDescription() { return websiteDescription; } public void setWebsiteDescription(String websiteDescription) { this.websiteDescription = websiteDescription; } } class WebsiteSorter { public static void sortByLanguage(ArrayList<TutorialWebsite> tutorials) { tutorials.sort((t1, t2) -> t1.getLanguageName().compareToIgnoreCase(t2.getLanguageName())); } }
内容的提问来源于stack exchange,提问作者Jazz4Dayz
相关产品推荐
相关产品推荐

