Java stream 分组操作

这篇具有很好参考价值的文章主要介绍了Java stream 分组操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

根据单/多字段分组

单字段分组可以直接使用指定字段,多字段分组则采用拼接Key的形式

单字段:

//单字段分组
Map<String, List<User>> singleAttr = list.stream().collect(
                Collectors.groupingBy(t -> t.getNativePlace()));
//还可以写成简化版
//Map<String, List<User>> collect = list.stream().collect(
// Collectors.groupingBy(User::getNativePlace));

多字段:

//多字段分组
Map<String, List<User>> multiAttr = list.stream().collect(
                Collectors.groupingBy(t -> t.getNativePlace()+"_"+t.getAge()));

多层级:文章来源地址https://www.toymoban.com/news/detail-618102.html

//多级分组
Map<String, Map<Integer, List<User>>> multiLevel = list.stream().collect(
        Collectors.groupingBy(
                t -> t.getNativePlace(),
                Collectors.groupingBy(t -> t.getAge())
        )
);

测试

package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        ArrayList<User> list=new ArrayList<User>();
        list.add(new User(11,"a"));
        list.add(new User(12,"a"));
        list.add(new User(14,"c"));
        list.add(new User(14,"c"));
        //单字段分组
        Map<String, List<User>> singleAttr = list.stream().collect(Collectors.groupingBy(t -> t.getNativePlace()));
        //还可以写成简化版
        //Map<String, List<User>> collect = list.stream().collect(Collectors.groupingBy(User::getNativePlace));
        //多字段分组
        Map<String, List<User>> multiAttr = list.stream().collect(Collectors.groupingBy(t -> t.getNativePlace()+"_"+t.getAge()));
        //多级分组
        Map<String, Map<Integer, List<User>>> multiLevel = list.stream().collect(
                Collectors.groupingBy(
                        t -> t.getNativePlace(),
                        Collectors.groupingBy(t -> t.getAge())
                )
        );
    }
}

class User{
    private int age;
    private String nativePlace;

    public String getNativePlace() {
        return nativePlace;
    }

    public void setNativePlace(String nativePlace) {
        this.nativePlace = nativePlace;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public User(int age,String nativePlace) {
        this.age = age;
        this.nativePlace=nativePlace;
    }
}

到了这里,关于Java stream 分组操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java Stream 处理分组后取每组最大&Stream流之list转map、分组取每组第一条&Java 8 Collectors:reducing 示例(List分组取最值)

    有一个需求功能:先按照某一字段分组,再按照另外字段获取最大的那个 先根据appId分组,然后根据versionSort取最大. JDK1.8推出的stream流能极大的简化对集合的操作,让代码更美观,老规矩,直接上代码。 取list中对象的某个属性作为唯一key,对象作为value形成一个map集合,能

    2024年02月16日
    浏览(60)
  • Java8 Stream 之groupingBy 分组讲解

    本文主要讲解:Java 8 Stream之Collectors.groupingBy()分组示例 Collectors.groupingBy() 分组之常见用法 功能代码: /**      * 使用java8 stream groupingBy操作,按城市分组list      */     public void groupingByCity() {         MapString, ListEmployee map = employees.stream().collect(Collectors.groupingBy(Employee::getCi

    2024年02月13日
    浏览(46)
  • Java中用Stream分组并求各组数量

    比如给了我一个班级的所有人的姓氏和姓名对象集合,根据这个集合求出各姓氏有多少人。直接上代码。 User的实体类对象为 输出的结果为:   即姓张的有3个,姓李的有两个。 详解: 将该集合的stream流用Collectors对象转成Map,用User对象的firstName作为Key,默认键值为1,在处

    2024年02月12日
    浏览(41)
  • Java Stream 实用特性:排序、分组和 teeing

    基本数据类型排序 基本数据类型就是字符串、整型、浮点型这些,也就是要排序的列表中的元素都是这些基本类型的,比如 ListInteger 的。 下面就用一个整型列表举例说明。 正序排序 正序排序,也可以叫做按照自然顺序排序,对于整型来说就是从小到大的。 输出结果是 [0

    2024年02月03日
    浏览(50)
  • Java8的stream之groupingBy()分组排序

    groupingBy()是Stream API中最强大的收集器Collector之一,提供与SQL的GROUP BY子句类似的功能。 需要指定一个属性才能使用,通过该属性执行分组。我们通过提供功能接口的实现来实现这一点 - 通常通过传递lambda表达式。 TreeMap默认按照key升序排序,collectPlan.descendingMap()可以进行降序排

    2024年02月12日
    浏览(39)
  • Java 8 Stream实用篇,玩转集合的筛选、归约、分组、聚合

    Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。 Stream可以由数组或集合创建,对流的操作分为两种: 中间操作 ,每次返回一个新的流,可以有多个。 终端操作 ,每个流只能进行一次终端操作,终端操

    2024年01月20日
    浏览(71)
  • Java解决stream流Collectors.groupingBy 分组统计可能报空指针异常

    在使用stream流的Collectors.groupingBy做分组统计时(示例代码如下) 如果统计的字段userName有null值则会报如下错误 解决方法为在统计之前增加一个filter方法将null值事先过滤掉。代码如下:

    2024年02月04日
    浏览(65)
  • Java8 Stream分组groupBy后,取单一字段值、取列表第一个值方式

    java8 Stream中groupBy的拓展用法。 取单一字段值、取列表第一个值方式

    2024年02月14日
    浏览(39)
  • Java8使用stream流给List<Map<String,Object>>分组(多字段key)

    Java8使用 stream流 给ListMapString,Object根据字段key 分组 一、项目场景: 从已得到的List集合中,根据某一元素(这里指map的key)进行分组,筛选出需要的数据。 如果是SQL的话则使用 group by 直接实现,代码的方式则如下: 使用到stream流的 Collectors.groupingBy() 方法。 二、代码实现 1、首

    2024年02月02日
    浏览(65)
  • Java8用Stream流一行代码实现数据分组统计,排序,最大值、最小值、平均值、总数、合计

    Java8对数据处理可谓十分流畅,既不改变数据,又能对数据进行很好的处理,今天给大家演示下,用Java8的Stream如何对数据进行分组统计,排序,求和等 汇总统计方法 找到汇总统计的方法。这些方法属于java 8的汇总统计类。 getAverage(): 它返回所有接受值的平均值。 getCount():

    2023年04月20日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包