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