gpt4 book ai didi

java - 在 Java 中对此 Map 进行排序

转载 作者:行者123 更新时间:2023-11-30 05:54:52 25 4
gpt4 key购买 nike

我有一个 Map,其中 FullName 是一个对象,并包含另一个包含 FirstName 和 LastName 的 Name 类对象。名字和姓氏是字符串。 (是的,我知道这是一个糟糕的设计,但我正在尝试学习排序)

关键字符串只是 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()));
}
}

最佳答案

您的比较器适用于 String对象,但是 map.entrySet().stream()返回 Entry<String, FullName> 的流对象。

根据 JB 在评论中的建议,您可以使用静态 Comparator方法#comparing快速构建Comparator :

List<String> listofIds = map.entrySet().stream().sorted(
Comparator.comparing(e -> e.getValue().getName().getFirstName())
).map(Map.Entry::getKey).collect(toList());

您可以利用Comparator是这样的功能界面:

List<String> listofIds = map.entrySet().stream().sorted(
(e1, e2) -> e1.getValue().getName().getFirstName().compareTo(
e2.getValue().getName().getFirstName())
).map(Map.Entry::getKey).collect(toList());

如果您仍想使用Comparator对象,您可以使用:

private static class ValueComparator implements Comparator<Entry<String, FullName>> {

@Override
public int compare(Entry<String, FullName> e1, Entry<String, FullName>> e2) {
FullName fullName1 = e1.getValue();
FullName fullName2 = e2.getValue();
return fullName1.getName().getFirstName()
.compareTo(fullName2.getName().getFirstName());
}
}

关于java - 在 Java 中对此 Map<String, FullName> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53344337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com