java jdk 8 新功能 stream实现各种list操作

jdk1.8 List集合Stream流式处理 Java 8 引入了一个新的抽象层——Stream API,它允许你以声明性方式处理数据集合(包括数组、集合等)。Stream API 提供了一种高效且易于表达的方式来处理数据集合,包括过滤、排序、映射和归约等操作。这种处理方式极大地提高了代码的可读性和可维护性,同时也提升了处理大量数据的性能。Stream(流)是 Java 8 引入的一个关键抽象概念,它代表了一个来自数据源的元素队列并支持聚合操作。 阅读详情

首先定义1个Apple对象:

public class Apple {    
    private Integer id;    
    private String name;    
    private BigDecimal money;    
    private Integer num;    
    
    public Apple(Integer id, String name, BigDecimal money, Integer num) {        
        this.id = id;        
        this.name = name;        
        this.money = money;        
        this.num = num;    
    }
}

添加一些测试数据:

List<Apple> appleList = new ArrayList<>();//存放apple对象集合
 
Apple apple1 =  new Apple(1,"苹果1",new BigDecimal("3.25"),10);
Apple apple12 = new Apple(1,"苹果2",new BigDecimal("1.35"),20);
Apple apple2 =  new Apple(2,"香蕉",new BigDecimal("2.89"),30);
Apple apple3 =  new Apple(3,"荔枝",new BigDecimal("9.99"),40);
 
appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);

1.分组
List里面的对象元素,以某个属性来分组,例如,以id分组,将id相同的放在一起:

//List 以ID分组 Map<Integer,List<Apple>>
Map<Integer, List<Apple>> groupBy = appleList.stream().collect(Collectors.groupingBy(Apple::getId));
System.err.println("groupBy:"+groupBy);
{1=[Apple{id=1, name='苹果1', money=3.25, num=10}, Apple{id=1, name='苹果2', money=1.35, num=20}], 2=[Apple{id=2, name='香蕉', money=2.89, num=30}], 3=[Apple{id=3, name='荔枝', money=9.99, num=40}]}

2.List转Map
id为key,apple对象为value,可以这么做:

/**
 * List -> Map
 * 需要注意的是:
 * toMap 如果集合对象有重复的key,会报错Duplicate key ....
 *  apple1,apple12的id都为1。
 *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
 */
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, a -> a,(k1,k2)->k1));
打印appleMap 

{1=Apple{id=1, name='苹果1', money=3.25, num=10}, 2=Apple{id=2, name='香蕉', money=2.89, num=30}, 3=Apple{id=3, name='荔枝', money=9.99, num=40}}

3.过滤Filter
从集合中过滤出来符合条件的元素:

//过滤出符合条件的数据
List<Apple> filterList = appleList.stream().filter(a -> a.getName().equals("香蕉")).collect(Collectors.toList());
System.err.println("filterList:"+filterList);
[Apple{id=2, name='香蕉', money=2.89, num=30}]

4.求和
将集合中的数据按照某个属性求和:

//计算 总金额
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println("totalMoney:"+totalMoney);  //totalMoney:17.48

5.查找流中最大最小值

Collectors.maxBy 和 Collectors.minBy 来计算流中的最大或最小值。

Optional<Dish> maxDish = Dish.menu.stream().collect(Collectors.maxBy(Comparator.comparing(Dish::getCalories)));
maxDish.ifPresent(System.out::println);
Optional<Dish> minDish = Dish.menu.stream().collect(Collectors.minBy(Comparator.comparing(Dish::getCalories)));
minDish.ifPresent(System.out::println);

6.去重
// 根据id去重

List<Person> unique = appleList.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(Apple::getId))), ArrayList::new));

7.元素排序
sorted方法用于对流中的元素进行排序

//按员工的薪水由低到高排序
List<Employee> sortedEmp = employees.stream().sorted(Comparator.comparing(Employee::getSalary)).collect(Collectors.toList());
sortedEmp.stream().forEach(System.out::println);
执行结果:

Employee{empno=7369, ename='SMITH', salary=800, deptno=20}
Employee{empno=7876, ename='ADAMS', salary=1100, deptno=20}
Employee{empno=7521, ename='WARD', salary=1250, deptno=30}
Employee{empno=7499, ename='ALLEN', salary=1600, deptno=30}
Employee{empno=7782, ename='CLARK', salary=2450, deptno=10}

下表展示 Collectors 类的静态工厂方法。

在这里插入图片描述

  1. List转int[]和int[]转List
    int[] k = keyList.stream().mapToInt(Integer::intValue).toArray();
    int[] src = {1,2,3,4,5,6,7,8,9,10};
    List list = Arrays.stream( src ).boxed().collect(Collectors.toList());
  2. String转为List
    String str = “1,2,3”;
    int[] a = Arrays.stream(str.split(",")).mapToInt(s -> Integer.parseInt(s)).toArray();
JDK8中使用流Stream流把List转换成int数组 阅读详情

相关推荐

PaddleOCR实战:从零开始训练自己的OCR模型(附完整代码与数据集处理技巧)

本文提供了一份详尽的PaddleOCR实战指南,手把手教你从零开始训练专属的OCR模型。内容涵盖高质量训练数据的准备与标注技巧、预训练模型的选型对比、关键参数调优策略,并附有完整的代码示例。通过遵循本文的步骤,开发者可以高效构建并优化贴合自身业务场景的高精度OCR模型,实现从数据到部署的全流程掌握。

weixin_29263201的博客 570

【java】使用stream实现各种list操作

之前一直感慨python做数据处理的方便和语法的简单,最近发现java的一些新特性,同样可以用简洁高效的代码来实现一些数据处理,以下内容转载自:Java8 使用stream实现各种list操作。 为了说明问题,首先定义1个Apple对象: publicclassApple { privateInteger id; privateString name;...

XYZ 1万+

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 700

使用stream流对list进行操作

使用stream流对两个list进行filter,sorted操作。 使用到的list如下: list: [ { "id":"hl", "aa":"xx", "bb":"", "cc":"" }, { "id":"hm", "aa":"xx1", "bb":"", "cc":"" }, { "id":"dh",

Turtle_Jaye的博客 3071

Ubuntu 部署 Ollama 避坑指南:下载失败 / 服务崩溃?一招解决所有问题!

本文详细介绍了在Ubuntu系统上安装Ollama大模型工具的完整流程和常见问题解决方案。主要内容包括:环境检查(系统版本、架构、依赖)、一键安装步骤、端口配置和服务启动等核心操作。重点针对下载失败、服务启动异常、权限不足等高频问题,提供了国内镜像配置、手动创建服务文件、用户组添加等实用解决方案。最后通过测试Qwen2.5轻量模型验证安装效果,并给出低配设备选型建议。全文提供可复制的命令行操作,帮助用户快速搭建离线可用的大模型环境。

2501_93651177的博客 1008

基于STM32+RFID设计的宿舍检修管理系统

设计一个上位机,用来管理查看维修检修信息,当维修寝室的设备或者检修完成时,通过STM32上的RC522刷一下这个寝室的IC卡,识别这是哪个寝室,识别成功后在软件上弹出一个对话框,填写本次维修或者检修的事件,填写完毕点击提交即可。...

2555

java8的stream流对list的常见操作

当我们对Stream 流中的数据操作完成之后,如果需要将流的结果进行保存,方便我们接下来对结果的继续操作,就得使用 Stream 流提供了的 collect() 方法,可以收集流中的数据到【集合】或者【数组】中。......

yangzhanghui的专栏 1万+

基于R-CNN深度学习的生活垃圾检测与分类系统:数据集、模型和UI界面的完整实现

我们将使用一个公开的垃圾分类数据集来训练我们的模型。一个常见的数据集是TACO数据集(Trash Annotations in Context),该数据集包含多种垃圾类别,适用于垃圾分类任务。TACO数据集中的图像标注了垃圾的类别以及其在图像中的位置,适合用于目标检测任务。图片数据:每张图片中包含不同种类的垃圾。标签文件:每个图像有相应的标签文件,标注了图像中垃圾的类别、位置(通常为边界框坐标)等信息。dataset/images/image1.jpgimage2.jpg......其中,

YOLO 1101

Java List循环一般写法与stream性能对比

java 版本: 如果需要对一个List进行循环,stream出来以后,我们又多了一种实现方式。但stream方式性能如何,各种说法都有,总体结论是没有一个标准答案,受各种环境影响。耳听为虚眼见为实,我们还是要自己动手试一下,才能有一个直观的感受,先直接上代码。 int size = 10; // 为了防止读一个list读性能影响,各自读一个list List<Integer> list1 = new ArrayList<>(

哇哇哇,真的学到了!!! 2798

基于STM32的智能浇花系统毕业设计(全部资料)

摘要:本文设计了一种基于STM32单片机的智能浇花系统,集成了环境温湿度检测、土壤温湿度监测、LCD显示、Wi-Fi联网及手机APP远程控制等功能。系统通过传感器实时采集环境参数,自动控制水泵工作实现智能灌溉,同时支持用户通过手机APP远程监控和调节。论文详细阐述了硬件选型、软件设计及系统测试过程,验证了系统的稳定性和实用性。该设计为家庭园艺提供了智能化解决方案,具有节水高效、操作便捷等特点。关键词:STM32;智能灌溉;远程控制;环境监测;Wi-Fi通信。

3254968421的博客 1194

第10章: MMU notifier与HMM的协作

本文摘要: HMM(Heterogeneous Memory Management)是Linux内核提供的异构内存管理框架,用于统一CPU与设备(如GPU、DSP等)的内存访问。它通过镜像页表技术实现虚拟地址空间共享,自动同步CPU和设备页表变化,支持透明的内存迁移和设备内存管理。HMM构建在mmu_interval_notifier机制上,利用序列号检测页表修改冲突,提供高效并发控制。核心数据结构包括hmm_range和HMM PFN标志位,通过hmm_range_fault()实现页表遍历和缺页处理。

图形/计算GPU的驱动与虚拟化技术分享园地 3088

Stream流使用,收集成一个List或者Set集合,可以代替for循环使用

文章目录1.Stream流是什么?2. stream流的创建方式?2.1通过集合直接创建2.2通过数组直接创建2.3通过Stream.of创建3. Stream对数据进行操作3.1 (filter,skip,limit,distinct)筛选和切片(方法直接可以通过链式编程写出)3.2 map映射3.3 进行排序3.4 (allmatch,noneMatch,findAny,filter)匹配查找3.5 (reduce)归约3.6 (collect) 收集,可以为Set(无序,去除重复),List(有序,有

有时间可以指导毕业设计,可以私聊我。一个热爱编程的smallCuteMonkey,可以私信我 8794

Open3D (C++) 计算点云坐标最值及其索引

使用C++版本的Open3D计算点云最值点及其对应的下标索引

点云侠的博客 727

java jdk8 使用stream实现两个list集合合并成一个list集合(对象属性的合并)

java使用stream实现list中对象属性的合并: 根据两个List中的某个相同字段合并成一条List,包含两个List中的字段 目录一、前言二、示例示例1:java8 合并两个 list<map>示例2:java8 合并两个 list<T>示例3:java8 合并两个 list<T>,集合个数前者小于后者,要后者示例4:java8 合并两个 list<T>,集合个数前者大于后者,要后者 一、前言 为什么要用Lambda表达式和Stream流做集合的处理? 因为效率高、代码简洁、高端大气上档次! (1)

12程序猿的博客 5万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

JAVA中List集合Stream流详解

1、Stream流介绍 在JDK8时,JAVA新增了lambda表达式,它与java.io包里的InputStream和OutputStream是完全不同的概念,他更跟流没有任何关系。它也不同于 StAX 对XML解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的Stream。 JDK8 中的 Stream 是对集合(Collection)对象功能的增强,...

wuxiong1028的博客 3万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java实现List中的数据分类(使用JDK1.8的List的stream()方法进行优化)

背景 JDK1.8实现List中的数据分类。 在JDK1.8之前是没有提供这样的API的,实现过程如下:JDK1.8之前实现List中的数据分类 过程 场景:需要把考生按照考生所属机构进行分类处理。已知考生在一个List容器中,并且考生有所属机构。 Candidate类 public class Candidate { private String orgId;//我的目的是以这...

sanding的博客 4977

jdk8中list,map的stream常见操作

本文的知识点: map 与flatmap的区别 从list中取出第一个元素,需要需要list为null,empty的情况 package com.alioo.stream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; import static java.util.stream.Col

明月专栏 2379

java 流 list_java jdk1.8 使用stream流进行list 分组归类操作

我就废话不多说了,大家还是直接看代码吧~import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;/*** @author czw*/public class Foo{private String name;private ...

weixin_42419508的博客 1158

java list 分组_java jdk1.8 使用stream流进行list 分组归类

哈哈,当我还是学生时自学PS披的第一张图就拿来发布第一篇文章在日常工作中我们都会遇到将数据进行分组的需求那么在Java 中如何将简单又方便的将list集合进行分组呢?在java8特性中我们可以使用stream流很方便的对集合进行操作下面将以两种方式进行分组操作(java8中还有其他操作可以分组,这里只介绍两种,其他方式大同小异)list 分组归类代码import com.alibaba.fastj...

weixin_39748445的博客 2743

JAVA JDK8 List分组的实现和用法

JAVA JDK8 List分组的实现和用法 时间:2018-12-06 今天小编就为大家分享一篇关于JAVA JDK8 List分组的实现和用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 概述 对List进行分组是日常开发中,经常遇到的,在JDK 8中对List按照某个属性分组的代码,超级简单。 package test; import com.a...

优快云_ling_的博客 1529

JAVA中JDK8新特性(Stream流)

JDK8以后才有的一个新特性,是专业用于对集合或者数组进行便捷操作的。有多方便呢?我们用一个案例体验一下,然后再详细学习。有一个List集合,元素有"张三丰","张无忌","周芷若","赵敏","张强",找出姓张,且是3个字的名字,存入到一个新集合中去。Collections.addAll(names, "张三丰","张无忌","周芷若","赵敏","张强");用传统方式来做,代码是这样的// 找出姓张,且是3个字的名字,存入到一个新集合中去。

2401_83377623的博客 1429

JDK 8 通过Stream 对List,Map操作和互转

Stream的原理和Lambda不在这了展开讨论。仅仅做笔记,方便后面查看,熟能生巧: 1、Map数据转换为自定义对象的List,例如把map的key,value分别对应Person对象两个属性:   List&lt;Person&gt; list = map.entrySet().stream().sorted(Comparator.comparing(e -&gt; e.getKey(...

hgc0907的专栏 8万+

【stream流】jdk8特性 list stream流操作合集,optional操作合集

jdk抢先版都出到23了 , jdk8的stream流用法 熟悉了嘛?

孟秋与你的博客 3260

jdk1.8 Stream的Array、List转换等常见用法

Stream是jdk8中java.util包中的新特性 Stream(流)是一个来自数据源的元素队列并支持聚合操作 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。 数据源流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。 聚合操作类似SQL语句一样的操作, 比如filter, map, reduce, f...

qq_39234840的博客 7364

Java8新特性Stream流之List、Map互转、去重、过滤

代码如下(过滤开头字母为a的字符串):stringList.stream().filter((s) -> s.startsWith("a")).forEach(System.out::println);代码如下(示例): stringList.stream().sorted().filter((s) -> s.startsWith("a")).forEach(System.out::println);排序是一个 中间操作,返回的是排序好后的 Stream。//根据某一属性分组,对象中的另一属性收束为集合。

weixin_46787654的博客 2779
上一篇: mysql出现group by xxx错误
下一篇: SpringBoot配置属性ssl/cookie/session/tomact
狂野弘仁
博客等级 码龄8年 34粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值