Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用过滤器将对象的ArrayList写入textfile_Java_Arraylist_Filewriter - Fatal编程技术网

Java 使用过滤器将对象的ArrayList写入textfile

Java 使用过滤器将对象的ArrayList写入textfile,java,arraylist,filewriter,Java,Arraylist,Filewriter,免责声明:我还没有写完代码,所以我一直在用糟糕的名字来写 识别事物 我有一个叫做PersonIndex的PersonObject数组列表。 PersonObject的参数如下:姓名、年龄、性别、身高 我要做的是处理列表,根据姓氏的开头,它会被写入不同的文本文件 因为尝试将三种编写方法组合到一个编写器中是不好的,所以我有三种不同的方法,然后它们被调用到一个方法中 该方法如下: public void fullWriteNames(){ writeNamesA2K(); writeN

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

我有一个叫做PersonIndex的PersonObject数组列表。 PersonObject的参数如下:姓名、年龄、性别、身高

我要做的是处理列表,根据姓氏的开头,它会被写入不同的文本文件

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

该方法如下:

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);
        }
    }

就我个人而言,虽然我可能会根据过滤器生成列表组,这可能比在整个列表上迭代3次要快一点……但这就是我

为什么不为单个write方法提供一个过滤器,该方法可以检查对象是否应该写入它?如果你的过滤器比startsWith或endsWith或contains更复杂,你可以使用正则表达式之类的东西……因为在你刚才提到它之前,我不知道这是可能的。@Frog6666,我不明白。你能把你的问题说清楚吗?我一直在实施你的建议,但没有和谷歌员工谈论一些完全无关的事情,但我一定会让你知道它是否有效以及我是如何实施的。
public void writeToFile(List<Person> listOfNames, File fileToWrite, String filter) {
    ...
}
 writeToFile(listOfPeople, fileForGroupAToK, "[A-Ka-k].*");