添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

通过 jdk8 的新特性list中stream流进行分组并合并字段

//获取查询条件下视图的数据,即原始数据集合
        List<VResPortUse> vResPortLists = new ArrayList<>();
        if (!CollectionUtils.isEmpty(nes)) {
            vResPortLists = neManager.getPortReportInfo(portReportDO);
//放到新的list集合中去
        List<VResPortUse> newVResPortLists = new ArrayList<>();
//按照网元进行分组后计算被用端口和端口总数
            vResPortLists.parallelStream()
                    .collect(Collectors.groupingBy(item -> (item .getNeId()), Collectors.toList()))
                    .forEach((id, transfer) -> {
                        transfer.stream()
                                .reduce((a, b) ->
                                        new VResPortUse(a.getNeId(),
                                                a.getPortTypeId(),
                                                a.getPortTypeName(),
                                                a.getTotal() + b.getTotal(),
                                                a.getUsed() + b.getUsed(),
                                                a.getNeName(),
                                                a.getPortTypeId(),
                                                a.getNeTypeName(),
                                                a.getNeTypeCategoryId(),
                                                a.getNeTypeCategoryName(),
                                                a.getCorpId(),a.getCorpName(),
                                                a.getSubnetPath(),a.getParentSubnetId(),
                                                a.getParentSubnetName()
                                .ifPresent(newVResPortLists::add);
                    });
@Data
public class VResPortUse {
    public VResPortUse() {
    public VResPortUse(Long neId, Integer portTypeId, String portTypeName, Long total, Long used, String neName, Integer neTypeId, String neTypeName, Integer neTypeCategoryId, String neTypeCategoryName, Integer corpId, String corpName, String subnetPath, Long parentSubnetId, String parentSubnetName) {
        this.neId = neId;
        this.portTypeId = portTypeId;
        this.portTypeName = portTypeName;
        this.total = total;
        this.used = used;
        this.neName = neName;
        this.neTypeId = neTypeId;
        this.neTypeName = neTypeName;
        this.neTypeCategoryId = neTypeCategoryId;
        this.neTypeCategoryName = neTypeCategoryName;
        this.corpId = corpId;
        this.corpName = corpName;
        this.subnetPath = subnetPath;
        this.parentSubnetId = parentSubnetId;
        this.parentSubnetName = parentSubnetName;
     * 所属网元id(查询辅助列)
    private Long neId;
     * 端口类型
    private Integer portTypeId;
     * 端口类型名称
    private String portTypeName;
    private Long total;
    private Long used;
     * 网元名称
    private String neName;
     * 网元型号
    private Integer neTypeId;
     * 网元型号名称
    private String neTypeName;
     * 网元型号分类id
    private Integer neTypeCategoryId;
     * 描述信息
    private String neTypeCategoryName;
     * 厂商id,自增长主键
    private Integer corpId;
     * 厂商名称
    private String corpName;
     * 从顶层子网开始的路径(子网与子网之间以.隔开),禁止其他表使用
    private String subnetPath;
     * 所在子网id,0代表顶层子网
    private Long parentSubnetId;
    private String parentSubnetName;
                                    话不多说直接上代码
//按自定义格式对数据集合List进行分组
//List.stream().collect(Collectors.groupingBy(对象Vo -> {分组自定义标志字段}))
List<TestRecord> TestRecordsByMonthList = mapper.selectTestRecordByCondition(plantId, startDate, endDate);
Map<String, List<TestRecord>&gt
                                    Java 8 – Stream Collectors groupingBy count examples
1. Group By, Count and Sort1.1 Group by a List and display the total count of it.
Java8Example1.javapackage com.mkyong.java8;
import java.util.Arra...
                                    在Java开发,数据处理是最基础的操作之一,而在面对大量数据时,合并与拆分数据是常见的需求。无论是简单的数据集合操作,还是复杂对象的属性合并Stream API 都能够灵活应对,并提高代码的可读性和可维护性。Stream API 是 Java 8 引入的一个强大的工具,旨在简化对集合数据的处理。下面的示例展示了如何从一个订单对象提取商品列表,并将其合并为一个总的商品集合。操作,我们可以轻松地提取对象的某个属性,并将其合并为一个新的数据集。合并数据通常指的是将多个集合或数组的数据进行拼接、组合。
                                    静态工厂方法:Collectors.groupingBy(),以及Collectors.groupingByConcunrrent(),给我们提供了类似SQL语句的"GROUP BY"的功能。上面的代码,讲每个BlogPost实例映射为了其对应的标题,然后把博客标题的stream连接成了成了字符串,形如“Post titles:[标题1,标题2,标题3]”。注意:maxBy和minBy都考虑了当第一次分组得到的结果是空的场景,因此其返回结果(Map的value)是Optional<BlogPost>。
                                    基于Java8介绍Java stream Collectors.groupingBy 功能 使用 方法,对java Collectors.groupingBy()的可用方法进行一一举例介绍,如stream分组 stream分组计数 stream分组求和 stream分组聚合等,基于stream collect() 和 收集器 Collectors
List items =
Arrays.asList(“apple”, “apple”, “banana”,
“apple”, “orange”, “banana”, “papaya”);
// 分组
Map<String, List<String>> result1 = items.stream().collect(
                                    对List进行分组java8的Stream 分组groupBy 的使用)
    最近在做一个功能:对一个接口接收的List数据进行校验,同一个订单里的一个产品id只能添加一次。本来想是在入库的时候通过SQL语句进行处理的。但是由于这个数据接口之前同事写了很多的校验,是在是又*又长。在度娘上查一下,发现了JAVA8 可以通过StreamList进行处理(这里主要是关于分组的);
Order order1 = new Order();
order1.setOrderId("123");
Order1.
                                    这里简单说一下jdk1.8新的stream操作的一个,grouppingby。
这个方法非常的实用,它可以非常迅速的将实体类数据进行分组获取。
Map&lt;Long,List&lt;Long&gt;&gt; exhibitionPitemMap = list.stream().collect(Collectors.groupingBy(TestDTO1::get...
                                    提到Group By,首先想到的往往是sqlgroup by操作,对搜索结果进行分组。其实Java8 Streams API的Collector也支持的数据进行分组和分区操作,本片文章讲简单介绍一下,如何使用groupingBy 和 partitioningBy来对的元素进行分组和分区。
	groupingBy
首先看一下Java8之前如果想对一个List分组操作,我们需要...
                                    https://www.jb51.net/article/194171.htm
这篇文章主要介绍了Java8 stream 利用 groupingBy 进行字段分组求和案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Java8的groupingBy实现集合的分组,类似Mysql的group by分组功能,注意得到的是一个map
对集合按照单个属性分组分组计数、排序
List<String> items =
    Arrays.asList("appl..