草庐IT

Collectors

全部标签

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作为

详细解决java中的Collectors.toMap引起的java.lang.IllegalStateException: Duplicate key xxx 的错误

文章目录目录1.复现错误2.分析错误3.解决问题4.重要补充1.复现错误今天,测试在禅道上给我指出一个正式环境bug,如下图所示:即java.lang.IllegalStateException:Duplicatekey2。2.分析错误根据java.lang.IllegalStateException:Duplicatekey2可知,这是java抛出的存在2个重复键的错误。如果想要弄清楚错误原因,通过如下几个步骤分析:首先,看到这个错误信息,先在本地使用postman测试这个接口,如下图所示:由于涉及到公司的安全,不能把接口展示出来。由上图可知,本地环境没有问题。查看正式环境的日志,如下图所示

java.io.IOException : Initialization of all the collectors failed. 最后一个收集器中的错误是:null

我是MapReduce的新手,我正在尝试找到问题的解决方案。我正在尝试链接两个mapreduce作业。第一个作业正在执行,但在第二个作业中我收到如下错误INFOmapreduce.Job:TaskId:attempt_1445271708293_0055_m_000000_1,Status:FAILEDError:java.io.IOException:Initializationofallthecollectorsfailed.Errorinlastcollectorwas:nullatorg.apache.hadoop.mapred.MapTask.createSortingCol

Java解决stream流Collectors.groupingBy 分组统计可能报空指针异常

在使用stream流的Collectors.groupingBy做分组统计时(示例代码如下) MapString,Long>collect=list.stream().collect(Collectors.groupingBy(User::getUserName,Collectors.counting()));如果统计的字段userName有null值则会报如下错误java.lang.NullPointerException:elementcannotbemappedtoanullkey atjava.util.Objects.requireNonNull(Objects.java:228)