草庐IT

Collectors

全部标签

java - 如何在 Java 8 Stream API 中使用 Collectors.grouping 来创建 map

我第一次寻找Java8的StreamAPI。我尝试创建一个过滤器来从Map中删除元素。这是我的map:Mapm=newHashMap();我想删除值)。这是我一直在尝试的:m.entrySet().stream().filter(p->p.getValue()>0).collect(Collectors.groupingBy(s->s.getKey()));我得到一个HashMap>。所以,这不是我想要的。我也试过:m.entrySet().stream().filter(p->p.getValue()>0).collect(Collectors.groupingBy(Map::Ent

java - Stream.sorted() 然后收集,还是收集然后 List.sort()?

这个问题在这里已经有了答案:Whatismoreefficient:sortedstreamorsortingalist?(3个答案)关闭4年前。总的来说,这两段代码在性能上有区别吗?Listlist1=someStream1.sorted().collect(toList());//vs.Listlist2=someStream2.collect(toList());list2.sort(Comparator.naturalOrder())变体2显然令人讨厌,应该避免,但我很好奇Stream的主流(嘿,mainstream)实现是否内置了任何性能优化,从而提高了性能两者的区别。我想因

Java流合并或减少重复对象

我需要通过将所有重复的条目合并到一个对象中,从一个可以有重复项的列表中生成一个唯一的好友列表示例-从不同的社交提要中获取friend并放入1个大列表1.friend-[姓名:“JohnnyDepp”,出生日期:“1970-11-10”,来源:“FB”,fbAttribute:“..”]2.friend-[姓名:“ChristianBale”,出生日期:“1970-01-01”,来源:“LI”,liAttribute:“..”]3.friend-[姓名:“JohnnyDepp”,出生日期:“1970-11-10”,来源:“Twitter”,twitterAttribute:“..”]4.

Java 8 stream.collect( ... groupingBy ( ... mapping( ... reducing ))) 减少 BinaryOperator 的使用

我尝试了一个使用groupingBy、mapping和reducing的解决方案以下问题:Elegantlycreatemapwithobjectfieldsaskey/valuefromobjectstreaminJava8.总结一下目标是得到一个以年龄为key,以一个人的爱好为Set的map。我想出的解决方案之一(不是很好,但这不是重点)有一个奇怪的行为。使用以下列表作为输入:ListpersonList=Arrays.asList(newPerson(/*name*/"A",/*age*/23,/*hobbies*/asList("a")),newPerson("BC",24,a

java - 空指针异常 : element cannot be mapped to a null key

我已阅读主题:Collectors.groupingBydoesn'tacceptnullkeys但我不明白如何将它应用于我的问题:我的代码:Map>mappingEntryMap=mapping.getMappingEntries().stream().collect(Collectors.groupingBy(MappingEntry::getMilestone,Collectors.mapping(e->e,Collectors.toList())));对我来说,MappingEntry::getMilestone有时会返回null。这对我的情况没问题,但我看到:Causedby

Java 8 lambda 用于为每个部门选择最高薪员工

classEmployee{publicstringdepartment;publicintsalary;}ListallEmployees=...我需要一个列表,每个部门只有1名高薪员工。allEmployees是源列表。 最佳答案 您可以使用分组收集器来做到这一点:MaptopEmployees=allEmployees.stream().collect(groupingBy(e->e.department,collectingAndThen(maxBy(comparingInt(e->e.salary)),Optional::

java - Java 8 Collector UNORDERED 特性是什么意思?

在官方文档中你可以看到:UNORDEREDIndicatesthatthecollectionoperationdoesnotcommittopreservingtheencounterorderofinputelements.如果没有任何示例,这不是很有帮助。我的问题是,UNORDERED特征到底是什么意思?我应该将它与min或sum等缩减收集器一起使用,还是仅适用于集合收集器?在OpenJDK中,减少操作(min、sum、avg)看起来具有空特征。我希望在那里至少找到CONCURRENT和UNORDERED。 最佳答案 在没有特

Java 8 Stream 确定文本文件中的最大计数

对于我的作业,我必须将for循环替换为计算文本文档中单词出现频率的流,而且我无法弄清楚TODO部分。Stringfilename="SophieSallyJack.txt";if(args.length==1){filename=args[0];}MapwordFrequency=newTreeMap();Listincoming=Utilities.readAFile(filename);wordFrequency=incoming.stream().map(String::toLowerCase).filter(word->!word.trim().isEmpty()).colle

java - Java groupingBy 收集器是否保留列表顺序?

考虑一个列表List其中元素按People.getAge()的升序排序.如果我们使用Collectors.groupingBy(People::getCity)对这个列表进行分组,每个组/城市的结果列表是否仍按年龄排序?实际上,它似乎确实保留了顺序。我正在寻找保证。该方法的Javadoc说:IfpreservationoftheorderinwhichelementsappearintheresultingMapcollectorisnotrequired,usinggroupingByConcurrent(Function)mayofferbetterparallelperforma

java - 计算 Stream 的元素

我想计算流中的不同元素,想知道为什么Streamstream=Stream.of("a","b","a","c","c","a","a","d");Mapcounter1=stream.collect(Collectors.toMap(s->s,1,Integer::sum));没用。Eclipse告诉我ThemethodtoMap(Function,Function,BinaryOperator)inthetypeCollectorsisnotapplicableforthearguments((s)->{},int,Integer::sum)顺便说一下,我知道那个解决方案:Mapc