java8-常用stream操作(1)
前言
java8的Stream 流式操作,用于对集合进行投影、转换、过滤、排序、去重等,更进一步地说,这些操作能链式串联在一起使用,类似于 SQL 语句,可以大大简化代码。下面我就将平时常用的一些stream操作做一些汇总。
通过 IntStream 构造基本类型的流
//在java8之前,遍历0-99的基本操作for(int i = 0;i<100;i++){System.out.println("i:"+i);}//使用IntStream串行遍历IntStream.rangeClosed(0,99).forEach(i->{System.out.println("i:"+i);});//使用IntStream并行遍历IntStream.rangeClosed(0,99).parallel().forEach(i->{System.out.println("i:"+i);});
定义一个学生的结构体,为后续操作做准备
class Student{private String name;private int age;private int score;private String city;public Student(String name, int age, int score, String city) {this.name = name;this.age = age;this.score = score;this.city = city;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&score == student.score &&Objects.equals(name, student.name) &&Objects.equals(city, student.city);}@Overridepublic int hashCode() {return Objects.hash(name, age, score, city);}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", score=" + score +", city='" + city + '\'' +'}';}
}//构造数据List<Student> students = new ArrayList<>();students.add(new Student("stu001",18,70,"合肥"));students.add(new Student("stu001",18,70,"合肥"));students.add(new Student("stu002",23,80,"郑州"));students.add(new Student("stu003",45,90,"郑州"));students.add(new Student("stu004",32,73,"合肥"));students.add(new Student("stu005",66,76,"南京"));students.add(new Student("stu006",34,79,"杭州"));students.add(new Student("stu007",28,90,"合肥"));students.add(new Student("stu008",19,100,"杭州"));
filter
根据特定的条件进行过滤
//filter 实现过滤操作,这边过滤出年龄大于30的学生
students.stream().filter(s->s.getAge()>30).forEach(System.out::println);
map
元素进行转化
//map 对流每一个元素进行转化,将student的age转化成流
students.stream().map(Student::getAge).forEach(System.out::println);
sort 排序
根据条件进行排序操作
//sort 按年龄排序,倒序
students.stream().sorted(Comparator.comparing(Student::getAge).reversed()).forEach(System.out::println);
distinct 去重
对流元素进行去重操作
//distinct 去重,因为实现了hashcode和equals,名称为stu001的学生重复了
students.stream().distinct().forEach(System.out::println);
将集合组成一个list
students.stream().map(Student::getAge).collect(Collectors.toList()).forEach(System.out::println);
将集合组成一个set
students.stream().map(Student::getAge).collect(Collectors.toSet()).forEach(System.out::println);
最大值
求出年龄最大的学生
System.out.println(students.stream().max(Comparator.comparingInt(Student::getAge)).get());
最大值
求出年龄最最小的学生
System.out.println(students.stream().min(Comparator.comparingInt(Student::getAge)).get());
join操作
按照逗号进行join,用[]包裹起来
//join操作,姓名join
System.out.println(students.stream().map(Student::getName).collect(Collectors.joining(",","[","]")));
toMap操作
根据指定key,value生成一个map
students.stream().collect(Collectors.toMap(Student::getName,student -> student,(x1,x2)->x2)).entrySet().forEach(System.out::println);
groupingBy
根据城市对学生进行分组
students.stream().collect(Collectors.groupingBy(Student::getCity)).forEach((k,v)->{System.out.println(k+" = "+v);});
根据城市对学生进行分组,统计每个分组的count
students.stream().collect(Collectors.groupingBy(Student::getCity,Collectors.counting())).forEach((k,v)->{System.out.println(k+" = "+v);});
统计每个分组的分数平均值
students.stream().collect(Collectors.groupingBy(Student::getCity,Collectors.averagingInt(Student::getScore))).forEach((k,v)->{System.out.println(k+" = "+v);});
分组之转换分组结果List -> List
students.stream().collect(Collectors.groupingBy(Student::getCity, Collectors.mapping(Student::getName, Collectors.toList()))).forEach((k,v)->{System.out.println(k+" = "+v);});//打印结果
// 合肥 = [stu001, stu001, stu004, stu007]
// 郑州 = [stu002, stu003]
// 杭州 = [stu006, stu008]
// 南京 = [stu005]
自定义key
students.stream().collect(Collectors.groupingBy(student -> "key_"+student.getCity())).forEach((k,v)->{System.out.println(k+" = "+v);});
java8-常用stream操作(1)相关推荐
- Java8中stream()操作toMap()时Duplicate key问题解决
问题描述: 最近使用Java8中Steam()流进行tomap转换编程时,遇到以下错误 java.lang.IllegalStateException: Duplicate key bbbat jav ...
- java8使用stream操作集合类,如何使用bigDicemal计算工资?
文章目录 1. list集合通过stream转成map 2. map集合通过stream转成新的map 2. 使用bigDicemal计算工资(避免丢失精度) 1. list集合通过stream转成m ...
- Java8使用stream操作两个list根据某字段匹配再对其中一个list进行赋值
import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.F ...
- java8常用stream
//汇总计算 reduce CxmBiBatchFeeExt ext = new CxmBiBatchFeeExt(); List<DkSaleOrderItem> batchDkSale ...
- Java8中Stream流对集合操作
java8中Stream流引入函数式编程思想,主要配合各种接口.lambda表达式.方法引用等方式,为集合的遍历.过滤.映射等提供非常"优雅"的操作方式. Student.java ...
- Java8种Stream流相关操作——集合的筛选、归约、分组、聚合
过滤.筛选 filter skip /*** 过滤 筛选*/@Testpublic void test2(){List<String> list = Arrays.asList(&qu ...
- Java8的Stream中的Collectors操作求double类型和的坑
Java8的Stream中的Collectors操作求double类型和的坑 无敌踩坑王的我又双叒叕来了!!!!!! 例子: @Testpublic void testSumDouble() {dou ...
- java8中 lambda表达式,stream操作
什么是lambda表达式 概念:Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda ab ...
- Java8 stream操作
这里记录一下java8的stream语法使用 /*** @author fengzp* @date 2017/4/11下午4:49* @email fengzp@gzyitop.com* @compa ...
- java8的stream特性_Java8新特性介绍:Stream API
Stream API 了解Stream Java8中有两个比较大的改变 Lambda表达式 Stream API (java.util.stream.*) Stream是Java8中处理集合的关键抽象 ...
最新文章
- spring aop 拦截业务方法,实现权限控制
- 转:Eclipse自动补全功能轻松设置
- 全球著名 CMS 产品大全
- oracle实列关闭,Oracle单实例+ASM启动与关闭
- http post请求 参数放在路径后面 java_「思唯网络学院」网络基本概念之HTTP协议...
- mysql读书笔记----时间函数
- HDU-4027 Can you answer these queries? --线段树
- 13--长度最小的子数组
- 数据结构基础(12) --双向循环链表的设计与实现
- Android 系统性能优化(80)---Android性能优化:这是一份详细的布局优化 指南(含lt;includegt;、lt;Viewstubgt;、lt;mergegt;)
- 台达vfd一ⅴe变频说明书_PLC运动控制实例解析:PLC与变频器系统
- js 获取相同name元素的属性值
- iOS 无证书真机调试
- 网络安全界基于知识的识别和映射提出网络空间资源分类明细
- 在计算机操作中粘贴的快捷键是什么,复制粘贴的快捷键,详细教您电脑怎么使用快捷键复制粘贴...
- 《手把手教你构建自己的 Linux 系统》学习笔记(9)
- Winrar 4.0破解
- Rviz 实现 pannel 插件
- 悖论对计算机科学影响,科学界最著名的几大悖论,你能解释吗?
- 桐梓县春晖行动志愿者协会开展同心抗疫志愿服务保障工作