【发布时间】:2018-11-16 19:40:04
【问题描述】:
我有一个 Map,其中 FullName 是一个对象,并且包含另一个包含 FirstName 和 LastName 的类 Name 对象。名字和姓氏是字符串。 (是的,我知道这是一个糟糕的设计,但我正在努力学习排序)
key String 就是 id,比如 1,2,3,...
我想根据全名(名字和姓氏)进行排序,然后只返回一个 id 列表。
这是我到目前为止的代码,但我在通过比较器的排序部分遇到语法错误。而且我很确定我在语义上也做了一些不正确的事情。
List<String> listofIds = map.entrySet().stream()
.sorted(new ValueComparator(map))
.map(Map.Entry::getKey)
.collect(toList());
class ValueComparator implements Comparator<String> {
Map<String, FullName> base;
public ValueComparator(Map<String, FullName> base) {
this.base = base;
}
public int compare(String a, String b) {
FullName fullName1 = base.get(a);
FullName fullName2 = base.get(b);
return(fullName1.getName().getFirstName()
.compareTo(fullName2.getName().getFirstName()));
}
}
【问题讨论】:
-
您想比较 Map 条目。所以你需要的是 Comparator
>,而不是 Comparator 。 -
拥有 FullName 的代码会很有帮助,因为它用于您共享的代码和实际错误中。有关如何编写好问题的更多建议,请参阅:stackoverflow.com/help/how-to-ask