草庐IT

collectors

全部标签

java - 在 Java 8 中创建嵌套的父子列表

我是Java8的新手,需要解决以下问题。我有两个类如下:classPerson{Stringname;intage;Listaddress;}classAddress{Stringstreet;Stringcity;Stringcountry;}现在我有一个来自数据库的列表,如下所示:ListfindPerson;adam26adam26bill31现在我需要将同一个人对象与不同地址对象合并为一个对象,如下所示?ListfindPerson;adam26bill31这如何在Java8流中完成? 最佳答案 我建议您实现equals和h

java - 使用 Java 8 创建 int 事件映射

我知道我的问题与CountintoccurrenceswithJava8非常相似,但我仍然无法解决我的案子,这一定更容易解决。需要计算整数流中整数重复的次数(将来自文件,可能多达1000000个整数)。我认为创建一个映射可能会有用,其中整数将是一个键,出现次数将是一个值。异常(exception)是Error:(61,66)java:methodcollectininterfacejava.util.stream.IntStreamcannotbeappliedtogiventypes;required:java.util.function.Supplier,java.util.fun

java - 使用 Collectors.groupingby 创建集合的映射

我知道如何创建Map>,使用Collectors.groupingBy:Map>listMap=items.stream().collect(Collectors.groupingBy(s->s.key));我将如何修改该代码以创建Map>?或者我可以不使用stream来做吗?因此必须使用for循环等手动创建它? 最佳答案 使用Collectors.toSet()作为groupingBy中的下游:Map>map=items.stream().collect(Collectors.groupingBy(s->s.key,Collect

java - 使用 Streams 实现 Java 数据透视表

我这几天一直在为这个问题苦苦挣扎。我正在尝试使用JavaStreams创建Pivot功能。我只需要执行SUM、COUNT、MAX、MIN和AVERAGE。对于输入,我得到了一个数据透视列索引、一个数据透视行索引数组和要计算的值。要注意的是数据在List>中,其中Object可以是String、Integer或Double。但直到运行时我才知道。我必须以List>的形式返回我的结果。我在处理MAX/MIN时遇到问题(我假设AVERAGE与MAX和MIN相似)为了以多个表值为中心,我创建了一个类来使用我的第二个groupingBy这不会编译,我不确定要比较什么,在哪里将对象转换为int或者

java - Stream.map(...) 和 Collectors.mapping(...) 有什么区别?

我注意到Stream中公开了许多功能显然在Collectors中重复,例如Stream.map(Foo::bar)与Collectors.mapping(Foo::bar,...)或Stream.count()与Collectors.counting()。这些方法之间有什么区别?有性能差异吗?它们的实现方式是否有所不同,从而影响它们的并行化程度? 最佳答案 Stream中存在似乎重复功能的收集器,因此它们可以用作收集器组合器(如groupingBy())的下游收集器。作为一个具体示例,假设您要计算“卖家的交易次数”。你可以这样做:M

使用自定义收集器的 Java 8 分组?

我有以下类(class)。classPerson{Stringname;LocalDatebirthday;Sexgender;StringemailAddress;publicintgetAge(){returnbirthday.until(IsoChronology.INSTANCE.dateNow()).getYears();}publicStringgetName(){returnname;}}我希望能够按年龄分组,然后收集人员姓名列表而不是Person对象本身;所有这些都在一个漂亮的兰巴表达式中。为了简化这一切,我链接了我当前的解决方案,该解决方案存储按年龄分组的结果,然后迭

java - 如何从方法 Collectors.groupingBy 获取有序类型的 map

我需要将数据列表按类型分成不同的列表,为此我使用构造Map>dishMap=menu.stream().collect(Collectors.groupingBy(Dish::getType));但是如何从方法“Collectors.groupingBy”中获取LinkedHashMap而不是HashMap。我在javadoc中找到了一些数据,但我无法获得必须使用此方法执行的操作:Map>dishMap=menu.stream().collect(Collectors.groupingBy(Dish::getType,LinkedHashMap::new,????));我应该在方法“g

java - 如果 toList 返回空列表,则收集器返回 singletonList

我有一个相当大的流管道,因此想保持它的清洁。我有以下部分更大的管道IntegerdefaultInt;//...Streamints;ints.filter(/*predicate_goes_here*/).collect(toSingletonIfEmptyCollector);如果toSingletonIfEmptyCollector返回非空列表和Collections.singletonList(defaultInt)如果Collectors.toList()返回空。有没有更短的方法来实现它(例如,通过组合JDK中提供的标准收集器)而不是从头开始实现所有Collector的方法?

java - Java Collectors.toMap内存优化

我有一个将列表转换为map的函数。调用该函数后map的大小不会改变。我正在尝试在以下两种实现之间做出决定:MaplistToMap(Listobjs){/*ImplementationOne:*/Mapmap=newHashMap(objs.size(),1);for(Objectobj:objs){map.put(obj.getKey(),obj);}returnmap;/*ImplementationTwo:*/returnobjs.stream().collect(Collectors.toMap(Object::getKey,obj->obj));}在第一个实现中,我通过使用1

Collectors.toMap的暗坑与避免方式

使用Java的stream中的Collectors可以很方便地做容器间的转换,可以少写很多代码。但是其中有暗含的坑需要注意和避免,本文探讨Collectors.toMap(JDK8版本)。Collectors.toMap可以将一个流转化成Map,常见于需要将List转换成Map以便于进一步操作的场景,比如在通过RPC接口获取一个返回结果、从DB中查询到匹配的多条数据后,对其按某个字段(经常是主键id)做分组。这里先定义一个简单的类:publicclassUser{privateLongid;privateStringname;}后续所有代码的目的均为将这个User类组成的List转换为id作为