对于Collectors.groupingBy()返回Map>是否暗示List是为了评估流吗?我没有看到对列表排序的明确描述,而并发版本明确说明没有排序。如果它不是以某种方式订购的,我希望它是一个集合,但我看不出它可能是什么其他订购,除了收到的订单。我希望它能保证每个列表中的最后一个值是该组收到的最后一个值。 最佳答案 groupingBy()的文档说:ImplementationRequirements:Thisproducesaresultsimilarto:groupingBy(classifier,toList());toL
我想对一个人的列表进行分组。一个人有一些属性,如姓名、国家、城镇、邮政编码等。我写了静态代码,效果很好:ObjectgroupedData=data.stream().collect(groupingBy(Person::getName,Collectors.groupingBy(Person::getCountry,Collectors.groupingBy(Person::getTown))));但问题是,它不是动态的。有时我只想按名称和城镇分组,有时按属性分组。我怎样才能做到这一点?也欢迎使用非Java8解决方案。 最佳答案
近期的项目里,遇到一个需求:对于含有多个元素的List,按照其中的某几个属性进行分组,比如Persion::getAge、Persion::getType、Persion::getGender等字段。下面就让我们讨论一下如何比较优雅的按多字段进行分组groupingBy。利用Stream进行分组Stream是Java8的一个新特性,主要用户集合数据的处理,如排序、过滤、去重等等功能,这里我们不展开讲解。本文主要讲解的是利用Stream.collect()来对List进行分组。Person类Person.java:publicclassPerson{/***id*/privateIntegeri
Java8的stream之groupingBy()分组排序一、默认升序排序二、descendingMap()降序排序三、总结groupingBy()是StreamAPI中最强大的收集器Collector之一,提供与SQL的GROUPBY子句类似的功能。需要指定一个属性才能使用,通过该属性执行分组。我们通过提供功能接口的实现来实现这一点-通常通过传递lambda表达式。一、默认升序排序stationMap=peopleList.stream().collect(Collectors.groupingBy(People::getJgId));二、descendingMap()降序排序station
我想创建一个Map来自List的Points并在映射中使用相同的parentId映射列表中的所有条目,例如Map>.我用了Collectors.toMap()但它没有编译:Map>pointByParentId=chargePoints.stream().collect(Collectors.toMap(Point::getParentId,c->c)); 最佳答案 TLDR:收集到Map包含单个键值(Map),使用Collectors.toMap().Collection到Map包含多个键值(Map>),使用Collectors.
我想创建一个Map来自List的Points并在映射中使用相同的parentId映射列表中的所有条目,例如Map>.我用了Collectors.toMap()但它没有编译:Map>pointByParentId=chargePoints.stream().collect(Collectors.toMap(Point::getParentId,c->c)); 最佳答案 TLDR:收集到Map包含单个键值(Map),使用Collectors.toMap().Collection到Map包含多个键值(Map>),使用Collectors.
我有一个包含这些字段的类Foo:id:int/name;String/targetCost:BigDecimal/actualCost:BigDecimal我得到一个此类对象的数组列表。例如:newFoo(1,"P1",300,400),newFoo(2,"P2",600,400),newFoo(3,"P3",30,20),newFoo(3,"P3",70,20),newFoo(1,"P1",360,40),newFoo(4,"P4",320,200),newFoo(4,"P4",500,900)我想通过创建“targetCost”和“actualCost”的总和并对“行”进行分组来转
我有一个包含这些字段的类Foo:id:int/name;String/targetCost:BigDecimal/actualCost:BigDecimal我得到一个此类对象的数组列表。例如:newFoo(1,"P1",300,400),newFoo(2,"P2",600,400),newFoo(3,"P3",30,20),newFoo(3,"P3",70,20),newFoo(1,"P1",360,40),newFoo(4,"P4",320,200),newFoo(4,"P4",500,900)我想通过创建“targetCost”和“actualCost”的总和并对“行”进行分组来转
我有这门课。classAssignment{privateIntegerindex;privateListquantities;}然后,我有一个来自该类的对象列表。Listassignments=newArrayList();有没有办法创建一个Map包含来自Assignment的索引和List作为值(value)观?这是我到目前为止尝试过的。assignments.stream().collect(groupingBy(Assignment::getIndex));但这给了我一个Map>我想要一个Map>.我试过使用forEach方法-它有效-但我确信必须有一种方法可以在一个类轮中完成
我已经实现了以下示例:Map>map=events.getItems().stream().collect(Collectors.groupingBy(Event::getStatus,Collectors.toList()));如何获得Map>map的输出相反?安EventDto可以通过执行一个转换Event的外部方法来获得到EventDto.例如-this::convertFromEventToEventDto. 最佳答案 您需要一个mappingCollector来将Event元素映射到EventDto元素:Map>map=e