java lambda表达式 steam api
java lambda表达式 steam api
案例使用 java版本为 jdk-17
foreach
遍历
public class JavaDemo03 {public static void main(String[] args) {List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);nums.forEach(System.out::println);}
}
运行结果:
1
2
3
4
5
6
7
8
9
map
逐个操作列表中每一个元素
public class JavaDemo04 {public static void main(String[] args) {List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);List<Integer> numbers = nums.stream().map(num -> num * 2).toList();numbers.forEach(System.out::println);}
}
运行结果:
2
4
6
8
10
12
14
16
18
flatMap
先对集合中每个元素进行map,再对map后的每个元素进行flatten
map后的每个元素也是一个集合
public class JavaDemo06 {public static void main(String[] args) {List<Integer> listA = new ArrayList<>();listA.add(1);listA.add(2);List<Integer> listB = new ArrayList<>();listA.add(5);listA.add(6);List<List<Integer>> listC = new ArrayList<>();listC.add(listA);listC.add(listB);List<Integer> numbers = listC.stream().flatMap(Collection::stream).toList();numbers.forEach(System.out::println);}
}
运行结果:
1
2
5
6
filter
过滤出符合规则的数据生成新的列表
public class JavaDemo07 {public static void main(String[] args) {List<Person> persons = new ArrayList<>();Person person;for (int i = 0; i < 10; i++) {person = new Person("user" + (i + 1), (i + 1) % 2);persons.add(person);}// 获取男性列表List<Person> manList = persons.stream().filter(user -> user.getGender() == 1).toList();// 获取女性列表List<Person> womanList = persons.stream().filter(user -> user.getGender() == 0).toList();manList.forEach(System.out::println);System.out.println("+++++++++++++++++++++++");womanList.forEach(System.out::println);}
}class Person {private String name;private int gender;public Person() {}public Person(String name, int gender) {this.name = name;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", gender=" + gender +'}';}
}class JavaDemo03 {public static void main(String[] args) {List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);nums.forEach(System.out::println);}
}
运行结果:
Person{name='user1', gender=1}
Person{name='user3', gender=1}
Person{name='user5', gender=1}
Person{name='user7', gender=1}
Person{name='user9', gender=1}
+++++++++++++++++++++++
Person{name='user2', gender=0}
Person{name='user4', gender=0}
Person{name='user6', gender=0}
Person{name='user8', gender=0}
Person{name='user10', gender=0}
reduce
相邻两个元素转为一个元素
列表中的所有元素转为一个元素
1, 2, 3, 4, 5, 6, 7, 8, 9
-1, 3, 4, 5, 6, 7, 8, 9
-4, 4, 5, 6, 7, 8, 9
-8, 5, 6, 7, 8, 9
-13, 6, 7, 8, 9
-19, 7, 8, 9
-26, 8, 9
-34, 9
-43
public class JavaDemo08 {public static void main(String[] args) {List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);List<Integer> numbers = nums.stream().reduce((a, b) -> a - b).stream().toList();numbers.forEach(System.out::println);}
}
运行结果:
-43
count
计数器
public class JavaDemo12 {public static void main(String[] args) {List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);long count = nums.stream().filter(num -> num % 2 == 0).count();System.out.println("列表中偶数是数量 >>> " + count);}
}
运行结果:
4
distinct
去重
public class JavaDemo13 {public static void main(String[] args) {List<Integer> nums = List.of(1, 2, 3, 5, 6, 7, 8, 9, 3, 4, 5, 7, 8, 2, 3);List<Integer> numbers = nums.stream().distinct().toList();numbers.forEach(System.out::println);}
}
运行结果:
1
2
3
5
6
7
8
9
4
sorted
排序类需要实现 Comparable 接口
public class JavaDemo14 {public static void main(String[] args) {List<Dog> dogs = new ArrayList<>();for (int i = 0; i < 10; i++) {dogs.add(new Dog("dog" + (i + 1), ThreadLocalRandom.current().nextInt(1, 10)));}dogs.forEach(System.out::println);List<Dog> newDogs = dogs.stream().sorted((a, b) -> a.getAge() - b.getAge()).toList();System.out.println("++++++++++++++");newDogs.forEach(System.out::println);}
}class Dog {private String name;private int age;public Dog() {}public Dog(String name, int age) {this.name = name;this.age = age;}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;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}
}
运行结果:
Dog{name='dog1', age=3}
Dog{name='dog2', age=3}
Dog{name='dog3', age=3}
Dog{name='dog4', age=3}
Dog{name='dog5', age=7}
Dog{name='dog6', age=6}
Dog{name='dog7', age=4}
Dog{name='dog8', age=8}
Dog{name='dog9', age=7}
Dog{name='dog10', age=2}
++++++++++++++
Dog{name='dog10', age=2}
Dog{name='dog1', age=3}
Dog{name='dog2', age=3}
Dog{name='dog3', age=3}
Dog{name='dog4', age=3}
Dog{name='dog7', age=4}
Dog{name='dog6', age=6}
Dog{name='dog5', age=7}
Dog{name='dog9', age=7}
Dog{name='dog8', age=8}
limit
TopN
public class JavaDemo17 {public static void main(String[] args) {int base = 1000;ArrayList<Video> videos = new ArrayList<>();for (int i = 0; i < 10; i++) {videos.add(new Video(base + i + 1, ThreadLocalRandom.current().nextInt(100, 1000)));}videos.forEach(System.out::println);System.out.println("+++++++++++++");videos.sort((a, b) -> b.getGold() - a.getGold());List<Video> topList = videos.stream().limit(3).toList();topList.forEach(System.out::println);}
}class Video {private int vid;private int gold;public Video() {}public Video(int vid, int gold) {this.vid = vid;this.gold = gold;}public int getVid() {return vid;}public void setVid(int vid) {this.vid = vid;}public int getGold() {return gold;}public void setGold(int gold) {this.gold = gold;}@Overridepublic String toString() {return "Video{" +"vid='" + vid + '\'' +", gold=" + gold +'}';}
}
运行结果:
Video{vid='1001', gold=566}
Video{vid='1002', gold=548}
Video{vid='1003', gold=620}
Video{vid='1004', gold=897}
Video{vid='1005', gold=264}
Video{vid='1006', gold=311}
Video{vid='1007', gold=882}
Video{vid='1008', gold=870}
Video{vid='1009', gold=106}
Video{vid='1010', gold=185}
+++++++++++++
Video{vid='1004', gold=897}
Video{vid='1007', gold=882}
Video{vid='1008', gold=870}
groupBy
分组
public class JavaDemo18 {public static void main(String[] args) {List<Animal> animals = new ArrayList<>();Animal animal;for (int i = 0; i < 10; i++) {animal = new Animal("animal" + (i + 1), (i + 1) % 2);animals.add(animal);}// 按照性别分组Map<Integer, List<Animal>> animalGenderGroup = animals.stream().collect(Collectors.groupingBy(Animal::getGender));animalGenderGroup.forEach((key, value) -> System.out.println((key == 1 ? "雄性" : "雌性") + " >>> " + value));}
}class Animal {private String name;private int gender;public Animal() {}public Animal(String name, int gender) {this.name = name;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getGender() {return gender;}public void setGender(int gender) {this.gender = gender;}@Overridepublic String toString() {return "Animal{" +"name='" + name + '\'' +", gender=" + gender +'}';}
}
运行结果:
雌性 >>> [Animal{name='animal2', gender=0}, Animal{name='animal4', gender=0}, Animal{name='animal6', gender=0}, Animal{name='animal8', gender=0}, Animal{name='animal10', gender=0}]
雄性 >>> [Animal{name='animal1', gender=1}, Animal{name='animal3', gender=1}, Animal{name='animal5', gender=1}, Animal{name='animal7', gender=1}, Animal{name='animal9', gender=1}]
java lambda表达式 steam api相关推荐
- Java Lambda 表达式-Steam之两个list间交集、并集、差集
//String[] 成list String[] strArr = targetHeadCost.getCurrentCostChangeReason().split(","); ...
- Java Lambda表达式初探
前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用JDK7.对企业来说,技术上谨慎未 ...
- Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记
Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...
- 深入理解Java Lambda表达式,匿名函数,闭包
前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...
- Java Lambda表达式入门 1
转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53930569 文章出自:薛瑄博客 我对Java 8发布非常激动,尤其是lambda ...
- Java Lambda表达式入门
本文转自:http://blog.csdn.net/renfufei... 转载请注明出处 原文链接: Start Using Java Lambda Expressions 下载示例程序 Examp ...
- java拉姆达表达式事例,Java Lambda表达式详解和实例
简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...
- Java Lambda表达式forEach无法跳出循环的解决思路
Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...
- java lambda 表达式中的双冒号和箭头的用法 ::
先构造一些数据,创建一个User类 java lambda 表达式中的双冒号的用法 :: 双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 如下图所示 User是一个类, ...
最新文章
- Maven父子工程配置文件详解
- PP部分主数据导出SQVI设置
- 保护IIS服务器的15个技巧
- 关于idea修改当前使用的git账户的问题
- 启继承父位在什么时候_为什么少儿口才现在越来越受到家长们的重视
- C语言学习之插入排序
- POJ3080 ZOJ2784 UVALive3628 Blue Jeans题解
- CCF NOI1022 平均年龄
- [置顶] 提高生产力:开源Java工具包Jodd(Java的”瑞士军刀”)
- 数据结构课程设计,迷宫问题求解
- 神经猫java代码_纯HTML5制作围住神经猫游戏-附源码下载
- SQL面试问题及回答
- ICMP协议之ping实现
- flutter的Toast
- 亚马逊 广告接口对接 amazon advertising
- jianx vtritualbox 虚拟镜像的体积
- 调查上网行为管理软件或设备
- 数据分析08章-dataframe第3-4节
- 01-初始化Vite项目
- appletviewer命令详解