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

时间:2015-05-08 01:39:41

标签: java arraylist filewriter

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

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

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

因为尝试将三种写入方法组合到一个编写器是不好的尝试,我有三个不同的,然后被调用到单个方法。

该方法如下:

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

我知道编写器方法的总体布局如下:

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,但除此之外我一无所知。

任何帮助将不胜感激。如果我在这里留下任何相关的编码,请告诉我。

2 个答案:

答案 0 :(得分:0)

由于角色真的只是数字,你可以这样做:

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的姓氏。

答案 1 :(得分:0)

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

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

这可能允许您设置一个可以采用&#34;过滤器&#34;参数并根据过滤器决定做什么

public void writeToFile(List<Person> listOfNames, File fileToWrite, String filter) {
    ...
}

你可以使用类似的东西打电话......

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

就个人而言,我可能会根据过滤器生成一组列表,这些列表可能会快一点,然后在整个列表上迭代3次......但那就是我;)