我实际上试图回答这个问题HowtoskipevenlinesofaStreamobtainedfromtheFiles.lines.所以我认为这个收集器不能很好地并行工作:privatestaticCollector>oddLines(){int[]counter={1};returnCollector.of(ArrayList::new,(l,line)->{if(counter[0]%2==1)l.add(line);counter[0]++;},(l1,l2)->{l1.addAll(l2);returnl1;});}但它有效。编辑:它实际上没有用;我被我的输入集太小而无法触发任
基准测试在intelcorei5,Ubuntu下运行javaversion"1.8.0_144"Java(TM)SERuntimeEnvironment(build1.8.0_144-b01)JavaHotSpot(TM)64-BitServerVM(build25.144-b01,mixedmode)我正在比较Collectors.counting和Collectors.summingLong(x->1L)的性能。这是基准:publicListints=newArrayList();Collectorcounting=Collectors.counting();Collectorsu
我正在创建一个HashMap使用java8streamAPI如下:Mapmap=dao.findAll().stream().collect(Collectors.toMap(Entity::getType,Entity::getValue));现在如果一个元素被添加到键已经存在的集合中,我只想保留列表中的现有元素并跳过附加元素。我怎样才能做到这一点?可能我必须使用BinaryOperation的toMap(),但任何人都可以提供我的具体案例的例子? 最佳答案 是的,您需要BinaryOperation并将其用作Collectors
如果解决方案非常明显但我似乎无法弄清楚如何做到这一点,请原谅我publicstaticvoidmain(String[]args){Mapmap=newHashMap();map.put("b1","a1");map.put("b2","a2");map.put("b3","a1");Map>mm=map.values().stream().collect(Collectors.groupingBy(m->m));System.out.println(mm);}我想根据HashMap中的值进行分组。我希望输出为{a1=[b1,b3],a2=[b2]}但它目前是{a1=[a1,a1],a
我正在玩Java8,我知道通过阅读文档这一定是可能的,但我只是不知道如何去做。我有以下工作代码:longfactorProduct=LongStream.rangeClosed(1,maxFactor).filter(this::isOptimalFactor).reduce((i,j)->i*j).getAsLong();ListprimeFactors=primeFactors(factorProduct);重要的是我有一个List可能在某些Long上有重复项数。现在我想把它转换成Map以元素作为键,以出现的值作为值。我认为:MapprimeFactorCount=primeFac
在java.util.stream.Stream接口(interface)中,Rcollect(Suppliersupplier,BiConsumeraccumulator,BiConsumercombiner);组合器是一个BiConsumer,而在Rcollect(Collectorcollector);组合器是一个BinaryOperator这不过是一个BiFunction.虽然后一种形式清楚地定义了组合后组合对象的引用,但前一种形式没有。那么任何Stream实现库如何知道前一种情况下的组合对象是什么? 最佳答案 在Java9
我有一个A类的列表classA{privateIntegerkeyA;privateIntegerkeyB;privateStringtext;}我想将aList传输到由keyA和keyB映射的嵌套Map所以我创建了以下代码。Map>>aMappedByKeyAAndKeyB=aList.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(A::getKeyA),result->{Map>>nestedMap=newHashMap>>();result.entrySet().stream().forEa
我有一个类叫做MonitoredData用它描述一个Activity,它的开始时间和结束时间。属性是activityLabel,startTime,endTime.我必须使用流对这些Activity进行分组和过滤,这些Activity的总持续时间超过10小时。我设法计算了持续时间的总和,并使用以下方法根据Activity对它们进行了分组:Mapmap4=newHashMap();map4=data.stream().collect(Collectors.groupingBy(MonitoredData::getActivity,Collectors.summingLong(Monito
我有一个包含项目的列表,其中每个项目都是一个具有我感兴趣的getter方法的对象。我想遍历整个列表以总结所有这些getter结果。当我使用java8流时,它看起来像这样:doublecurrentProduction=itemList.stream().collect(Collectors.summingDouble((e)->e.getProduction(param)));在普通的旧java中,它看起来像这样:for(Itemitem:itemList){currentProduction+=item.getProduction(param);}这两种方法产生完全相同的结果,但我的
我想在单个语句(可能包含多个嵌套语句)中声明一个完全填充的map字段,如下所示:privatestaticfinalMapmap=something-returning-an-unmodifiable-fully-populated-HashMap;匿名初始化器不会做,因为调用返回新填充映射的函数不会做的原因相同:它们需要两个顶级语句:一个用于变量声明,一个用于方法或初始化器.双花括号({{和}})惯用语会起作用,但它创建了一个扩展HashMap的全新类,我不喜欢由此带来的开销。Java8的lambda是否提供了更好的方法来实现这一目标? 最佳答案