Java8 新特性 list集合利用stream根据对象得某一属性对集合进行分组,附加8之前分组

简介: Java8 新特性 list集合利用stream根据对象得某一属性对集合进行分组,附加8之前分组

Java8 新特性 list集合利用stream根据对象得某一属性对集合进行分组,附加8之前分组


Java8之后很多新特性,接下来主要讲一下, list集合利用stream根据对象得某一属性对集合进行分组!

话不多说,上代码:

首先准备实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    private String name;
  //成绩
    private Double score;
}

然后开始写测试类:

import java.util.*;
import java.util.stream.Collectors;
public class GroupByName {
    public static void main(String[] args) {
        //准备要分组得集合
        List<Student> students = Arrays.asList(
            new Student(1,"伽罗",99d),
            new Student(2,"后羿",97d),
            new Student(3,"鲁班",98d),
            new Student(4,"后羿",90d),
            new Student(5,"百里",88d),
            new Student(6,"狼狗",59d),
            new Student(7,"艾琳",78d),
            new Student(8,"伽罗",94d)
        );
        //jdk8.0新特性来分组,根据学生姓名来进行分组
        Map<String,List<Student>> result = new HashMap<>();
        result = students.stream().collect(Collectors.groupingBy(Student::getName));
        result.forEach((x,y) -> System.out.println(x+"--"+y));
        System.out.println("华丽分割线"+"------------------------");
        //jdk1.8之前手写分组
        Map<String,List<Student>> map = new HashMap<>();
        for (Student student : students) {
            List<Student> list = map.get(student.getName());
            if (list == null) {
                list = new ArrayList<>();
                list.add(student);
                map.put(student.getName(), list);
            } else {
                list.add(student);
            }
        }
        map.forEach((x,y) -> System.out.println(x+"--"+y));
        /**
         * 结果:
         * 伽罗--[Student(id=1, name=伽罗, score=99.0), Student(id=8, name=伽罗, score=94.0)]
         * 百里--[Student(id=5, name=百里, score=88.0)]
         * 狼狗--[Student(id=6, name=狼狗, score=59.0)]
         * 艾琳--[Student(id=7, name=艾琳, score=78.0)]
         * 后羿--[Student(id=2, name=后羿, score=97.0), Student(id=4, name=后羿, score=90.0)]
         * 鲁班--[Student(id=3, name=鲁班, score=98.0)]
         */
    }
}

到这里新特性分组就介绍完了,列子简单,直接上手简单,谢谢大家支持!!

相关文章
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
1月前
|
存储 Java 数据处理
|
27天前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
37 0
|
3月前
|
消息中间件 NoSQL Java
别再用 Redis List 实现消息队列了,Stream 专为队列而生
别再用 Redis List 实现消息队列了,Stream 专为队列而生
67 0
如何使用Stream流将List转换为Map
如何使用Stream流将List转换为Map
|
1月前
|
存储 安全 Java
Python教程第3章 | 集合(List列表、Tuple元组、Dict字典、Set)
Python 列表、无序列表、字典、元组增删改查基本用法和注意事项
51 1
|
1月前
|
存储 安全 Java
【Java】集合(一)单列集合List
【Java】集合(一)单列集合List
22 0
|
1月前
|
Java API
java 对象list 使用stream进行过滤
在Java中,你可以使用Stream API对对象列表进行过滤。假设你有一个`List<MyObject>`,并且你想根据某些条件过滤出特定的对象。以下是一个示例: ```java import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<MyObject> myObjects = ... // 初始化你的对象列表 List<MyObject> filter
|
1月前
|
Java API
java查询属性个数
【2月更文挑战第11天】
|
2月前
|
存储 Java
深入剖析 Java 类属性与类方法的应用
Java 类属性,也称为字段,是类中的变量。它们用于存储与类相关的数据。 创建类属性 在类定义中声明属性
62 0