使用过滤器将对象的 ArrayList 写入文本文件

Writing ArrayList of objects to textfile using filter

(免责声明:我还没有写完编码,所以我一直在使用糟糕的名字来 识别事物。)

我有一个名为 PersonIndexPersonObject 的 ArrayList。 PersonObject的参数如下:姓名、年龄、性别、身高。

我想做的是处理列表,并根据姓氏的开头,将其写入不同的文本文件。

因为尝试将三个写入方法组合到一个 writer 中是一种不好的品味,所以我有三个不同的方法,然后将它们调用到一个方法中。

该方法如下:

public void fullWriteNames(){
    writeNamesA2K();
    writeNamesL2R();
    writeNamesS2Z();
}

我知道writer方法的大致布局如下:

String stopper = "stop";
    try{
        personWriter = new FileWriter(fileName2, true);
        personWriter.write(*stuff to write*);
        personWriter.close();
    }
    catch(IOException ioException){
        System.out.println("Error.");
    }

我遇到的问题是如何使用 .write 行的 if 语句来过滤对象。我知道我需要使用 .startsWith,但除此之外我一无所知。

如有任何帮助,我们将不胜感激。如果我在这里遗漏了任何相关的编码,请告诉我。

由于字符实际上只是数字,您可以这样做:

public void fullWriteNames() {
    char first = lastname.charAt(0);

    if (first >= 'A' && first <= 'K') 
        writeNamesA2K();
    else if (first >= 'L' && first <= 'R')
        writeNamesL2R();
    else if (first >= 'S' && first <= 'Z')
        writeNamesS2Z();
}

我在这里假设 lastname 变量是您 PersonObject 的姓氏。

您可以使用正则表达式来匹配组

    List<String> names = new ArrayList<>(25);
    names.add("Apple");
    names.add("apple");
    names.add("bannas");
    names.add("Kings");
    names.add("Nov");
    names.add("Nov");
    names.add("Yak");

    for (String name : names) {
        if (name.matches("[A-Ka-k].*")) {
            System.out.println("[A-K] " + name);
        } else if (name.matches("^[L-Rl-r].*")) {
            System.out.println("[L-R] " + name);
        } else if (name.matches("^[S-Zs-z].*")) {
            System.out.println("[S-Z] " + name);
        }
    }

这可能允许您设置一个写入方法,该方法可以采用 "filter" 参数并根据过滤器

决定要做什么
public void writeToFile(List<Person> listOfNames, File fileToWrite, String filter) {
    ...
}

您可以使用类似...

 writeToFile(listOfPeople, fileForGroupAToK, "[A-Ka-k].*");

不过,就我个人而言,我可能会倾向于根据过滤器生成列表组,这可能比遍历整个列表 3 次要快一些...但这就是我 ;)