gpt4 book ai didi

Java Stream sortBy 和 filter()

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:47 25 4
gpt4 key购买 nike

我有一个关于 Java 8 流的具体问题。我找不到任何接近解决我的问题的方法,即使它听起来不太复杂。

我想转换 List<Person>进入Map<Company, List<Person>> 。公司是一个枚举。现在Map应按 Company 分组(到目前为止,我一切正常。在我想通过属性过滤 List<Person> 的所有 Map 后: Person 的名称。我只想保留其中名称最长的人。示例:

这是我到目前为止得到的:

import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors;

public class PersonMap {

public static void main(String[] args) {
Person person1 = new Person("Pete", Company.APPLE);
Person person2 = new Person("Joe", Company.APPLE);
Person person3 = new Person("Jack", Company.APPLE);
Person person4 = new Person("Robert", Company.MICROSOFT);
Person person5 = new Person("Cate", Company.MICROSOFT);
Person person6 = new Person("Abi", Company.MICROSOFT);

List<Person> list = new LinkedList<>();
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
list.add(person5);
list.add(person6);
}

public Map<Company, List<Person>> groupPersonByCompanyAndFilterByName (List <Person> list){
Map<Company, List<Person>> outputMap =
list.stream().collect(Collectors.groupingBy(Person::getCompany))
.entrySet().stream()
.filter(p -> p.getValue().stream().toString().length() !=
p.getValue().stream().map(Person::getName).mapToInt(String::length).max().getAsInt())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));

return outputMap;
}
}

过滤功能在这里不起作用。我想要的输出是:

{MICROSOFT=["person4"], APPLE=[person1, person3]}

有谁有足够的知识可以帮助我吗?

最佳答案

这是一种使用发球的方法

public Map<Company, List<Person>> groupPersonByCompanyAndFilterByName (List <Person> list){
return list.stream().collect(groupingBy(Person::getCompany,
teeing(
mapping(Person::getName, maxBy(Comparator.comparing(String::length))),
toList(),
(a, b) -> b.stream().filter(x -> x.getName().length() == a.get().length())
.collect(toList())

)
));

}

关于Java Stream sortBy 和 filter(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59591505/

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