如何在 Java 6 中做 Collectors.groupingBy 等价?
How to do Collectors.groupingBy equivalent in Java 6?
我有一个List<UserVO>
每个 UserVO 都有一个 getCountry()
我想根据 getCountry()
对 List<UserVO>
进行分组
我可以通过流来完成,但我必须在 Java6
中完成
这是在 Java8。我想要这个 Java6
Map<String, List<UserVO>> studentsByCountry
= resultList.stream().collect(Collectors.groupingBy(UserVO::getCountry));
for (Map.Entry<String, List<UserVO>> entry: studentsByCountry.entrySet())
System.out.println("Student with country = " + entry.getKey() + " value are " + entry.getValue());
我想要像这样的输出 Map<String, List<UserVO>>
:
CountryA - UserA, UserB, UserC
CountryB - UserM, User
CountryC - UserX, UserY
编辑:我可以进一步重新安排这个 Map
以便我根据国家/地区的显示顺序显示。显示顺序为countryC=1, countryB=2 & countryA=3
比如我要显示
CountryC - UserX, UserY
CountryB - UserM, User
CountryA - UserA, UserB, UserC
这就是您使用普通 Java 的方式。请注意 Java 6 不支持菱形运算符,因此您一直明确使用 <String, List<UserVO>>
。
Map<String, List<UserVO>> studentsByCountry = new HashMap<String, List<UserVO>>();
for (UserVO student: resultList) {
String country = student.getCountry();
List<UserVO> studentsOfCountry = studentsByCountry.get(country);
if (studentsOfCountry == null) {
studentsOfCountry = new ArrayList<UserVO>();
studentsByCountry.put(country, studentsOfCountry);
}
studentsOfCountry.add(student);
}
流更短,对吧?所以尝试升级到Java 8!
要有一个基于反转字母字符串的特定顺序,如评论中所述,您可以将第一行替换为以下内容:
Map<String,List<UserVO>> studentsByCountry = new TreeMap<String,List<UserVO>>(Collections.reverseOrder());
我有一个List<UserVO>
每个 UserVO 都有一个 getCountry()
我想根据 getCountry()
List<UserVO>
进行分组
我可以通过流来完成,但我必须在 Java6
这是在 Java8。我想要这个 Java6
Map<String, List<UserVO>> studentsByCountry
= resultList.stream().collect(Collectors.groupingBy(UserVO::getCountry));
for (Map.Entry<String, List<UserVO>> entry: studentsByCountry.entrySet())
System.out.println("Student with country = " + entry.getKey() + " value are " + entry.getValue());
我想要像这样的输出 Map<String, List<UserVO>>
:
CountryA - UserA, UserB, UserC
CountryB - UserM, User
CountryC - UserX, UserY
编辑:我可以进一步重新安排这个 Map
以便我根据国家/地区的显示顺序显示。显示顺序为countryC=1, countryB=2 & countryA=3
比如我要显示
CountryC - UserX, UserY
CountryB - UserM, User
CountryA - UserA, UserB, UserC
这就是您使用普通 Java 的方式。请注意 Java 6 不支持菱形运算符,因此您一直明确使用 <String, List<UserVO>>
。
Map<String, List<UserVO>> studentsByCountry = new HashMap<String, List<UserVO>>();
for (UserVO student: resultList) {
String country = student.getCountry();
List<UserVO> studentsOfCountry = studentsByCountry.get(country);
if (studentsOfCountry == null) {
studentsOfCountry = new ArrayList<UserVO>();
studentsByCountry.put(country, studentsOfCountry);
}
studentsOfCountry.add(student);
}
流更短,对吧?所以尝试升级到Java 8!
要有一个基于反转字母字符串的特定顺序,如评论中所述,您可以将第一行替换为以下内容:
Map<String,List<UserVO>> studentsByCountry = new TreeMap<String,List<UserVO>>(Collections.reverseOrder());