【发布时间】:2018-05-20 20:32:25
【问题描述】:
我希望输出按字母顺序列出 userNameGenerator。我将 HashSet 转换为 ArrayList 因为集合无法排序,所以我将其更改为 ArrayList 以按字母顺序对列表进行排序。我使用 Collections.sort 按字母顺序对字符串列表进行排序,但是,输出仍然是 一样的。
我用于字母顺序的代码:
List sortedList = new ArrayList(personFile);
Collections.sort(sortedList);
System.out.println();
输出:
Dompteuse -> Imran Sullivan,
Deservedness -> Eadie Jefferson,
Ostracize -> Eadie Jefferson,
Abattoir -> Angel Whitehouse,
Choreography -> Imran Sullivan,Taylor Vargas,Priya Oliver,
Goodfella -> Khalil Person,Eadie Jefferson,
Frolicwas -> Taylor Vargas,
DarknianIdeal -> Sophia Jeffery,Clyde Calderon,Taylor Vargas,Liyah Navarro,
Cremaster -> Aryan Hess,
Reliable -> Imran Sullivan,Aryan Hess,Angel Whitehouse,Priya Oliver,
Hootenany -> Clyde Calderon,
Acrimony -> Taylor Vargas,
完整代码:
import java.util.*;
import java.io.*;
public class Codes {
public static void main(String[] args) {
List<Codes2> personFile = new ArrayList<>();
try {
BufferedReader br = new BufferedReader(new FileReader("person-data.txt"));
String fileRead = br.readLine();
while (fileRead != null) {
String[] personData = fileRead.split(":");
String personName = personData[0];
String userNameGenerator = personData[1];
Codes2 personObj = new Codes2(personName, userNameGenerator);
personFile.add(personObj);
fileRead = br.readLine();
}
br.close();
}
catch (FileNotFoundException ex) {
System.out.println("File not found!");
}
catch (IOException ex) {
System.out.println("An error has occured: " + ex.getMessage());
}
Set<String> newStrSet = new HashSet<>();
for(int i = 0; i < personFile.size(); i++){
String[] regionSplit = personFile.get(i).getUserNameGenerator().split(", ");
for(int j = 0; j < regionSplit.length; j++){
newStrSet.add(regionSplit[j]);
}
}
for (String s: newStrSet) {
System.out.printf("%s -> ", s);
for (Codes2 p: personFile) {
if (p.getUserNameGenerator().contains(s)) {
System.out.printf("%s, ", p.getPersonName());
}
}
List sortedList = new ArrayList(personFile);
Collections.sort(sortedList);
System.out.println();
}
}
}
人物类:
public class Codes2 implements Comparable<Codes2> {
private String personName;
private String userNameGenerator;
public Codes2(String personName, String userNameGenerator) {
this.personName = personName;
this.userNameGenerator = userNameGenerator;
}
public String getPersonName() {
return personName;
}
public String getUserNameGenerator() {
return userNameGenerator;
}
@Override
public int compareTo(Codes2 o) {
return getUserNameGenerator().compareTo(o.getUserNameGenerator());
}
public int compare(Object lOCR1, Object lOCR2) {
return ((Codes2)lOCR1).userNameGenerator
.compareTo(((Codes2)lOCR2).userNameGenerator);
}
}
参考:Simple way to sort strings in the (case sensitive) alphabetical order
【问题讨论】:
-
我认为您没有在任何地方打印排序列表是有原因的?
-
TreeSet 是自然排序的。
-
您希望 Region 如何参与进来?那些也是排序的,还是你也只是按 userGeneratedName 和区域列出?
-
为了以 Joe 的评论为基础,看起来您采用了一个正在使用 HashSets(但不是“工作”)的程序并试图将其转换为 ArrayList。但是您错过了一些细节,例如打印正确的输出。如果您没有一种长时间的方法来尝试做所有事情,这将更容易发现。将代码分解成更小的步骤(使用更小的方法),它会更容易阅读和调试。
-
您的排序在您的用户名生成器的循环中。同样,您正在对 Code2 对象进行排序,而不是对存储在 newStrSet 中的用户名生成器进行排序。如果您使用 Java 8,则可以使用流式解决方案更简单。
标签: java