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)]
         */
    }
}

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

相关文章
|
6月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
170 7
|
7月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
358 100
|
7月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
366 101
|
7月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
194 4
|
7月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
8月前
|
存储 NoSQL Java
Java Stream API:集合操作与并行处理
Stream API 是 Java 8 提供的集合处理工具,通过声明式编程简化数据操作。它支持链式调用、延迟执行和并行处理,能够高效实现过滤、转换、聚合等操作,提升代码可读性和性能。
|
8月前
|
存储 缓存 安全
Java集合框架(三):Map体系与ConcurrentHashMap
本文深入解析Java中Map接口体系及其实现类,包括HashMap、ConcurrentHashMap等的工作原理与线程安全机制。内容涵盖哈希冲突解决、扩容策略、并发优化,以及不同Map实现的适用场景,助你掌握高并发编程核心技巧。
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
138 10
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
243 19
|
Java 程序员
Java编程中的对象和类: 初学者指南
【9月更文挑战第9天】在Java的世界中,对象和类构成了编程的基石。本文将引导你理解这两个概念的本质,并展示如何通过它们来构建你的程序。我们将一起探索类的定义,对象的创建,以及它们如何互动。准备好了吗?让我们开始这段Java的旅程吧!

热门文章

最新文章