You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:39:31