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相关推荐

  1. Java Lambda 表达式-Steam之两个list间交集、并集、差集

    //String[] 成list String[] strArr = targetHeadCost.getCurrentCostChangeReason().split(","); ...

  2. Java Lambda表达式初探

    前言 本文受启发于Trisha Gee在JavaOne 2016的主题演讲Refactoring to Java 8. Java 8已经发行两年多,但很多人仍然在使用JDK7.对企业来说,技术上谨慎未 ...

  3. Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式.也称之为闭包或者匿名函数. ...

  4. 深入理解Java Lambda表达式,匿名函数,闭包

    前言 对于Lambda表达式一直是知其然不知其所以然,为了搞清楚什么是Lambda表达式,以及Lambda表达式的用法和作用,本文应运而生当做学习笔记分享出来,欢迎指正交流. 什么是Lambda 让我 ...

  5. Java Lambda表达式入门 1

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53930569 文章出自:薛瑄博客 我对Java 8发布非常激动,尤其是lambda ...

  6. Java Lambda表达式入门

    本文转自:http://blog.csdn.net/renfufei... 转载请注明出处 原文链接: Start Using Java Lambda Expressions 下载示例程序 Examp ...

  7. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

  8. Java Lambda表达式forEach无法跳出循环的解决思路

    Java Lambda表达式forEach无法跳出循环的解决思路 如果你使用过forEach方法来遍历集合,你会发现在lambda表达式中的return并不会终止循环,这是由于lambda的底层实现导 ...

  9. java lambda 表达式中的双冒号和箭头的用法 ::

    先构造一些数据,创建一个User类 java lambda 表达式中的双冒号的用法 :: 双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 如下图所示 User是一个类, ...

最新文章

  1. Maven父子工程配置文件详解
  2. PP部分主数据导出SQVI设置
  3. 保护IIS服务器的15个技巧
  4. 关于idea修改当前使用的git账户的问题
  5. 启继承父位在什么时候_为什么少儿口才现在越来越受到家长们的重视
  6. C语言学习之插入排序
  7. POJ3080 ZOJ2784 UVALive3628 Blue Jeans题解
  8. CCF NOI1022 平均年龄
  9. [置顶] 提高生产力:开源Java工具包Jodd(Java的”瑞士军刀”)
  10. 数据结构课程设计,迷宫问题求解
  11. 神经猫java代码_纯HTML5制作围住神经猫游戏-附源码下载
  12. SQL面试问题及回答
  13. ICMP协议之ping实现
  14. flutter的Toast
  15. 亚马逊 广告接口对接 amazon advertising
  16. jianx vtritualbox 虚拟镜像的体积
  17. 调查上网行为管理软件或设备
  18. 数据分析08章-dataframe第3-4节
  19. 01-初始化Vite项目
  20. appletviewer命令详解

热门文章

  1. 玛格丽特·米德2019下半年EI会议与人格理论初探
  2. 【CAR笔记1】标定的标准——ASAP和ASAM
  3. Seeker的奇妙求职历险(华为笔试)
  4. ubuntu18.04 使用scp命令
  5. apache ii评分怎么评_APACHEII评分说明
  6. unity通过鼠标滑轮控制物体大小
  7. 锻造宝剑!如何用一款手机打造一个移动渗透工具箱??
  8. 各大公司Java面试题超详细总结
  9. firefly-rk3288j开发板 eDP实验之NV101WXM-N51显示屏驱动
  10. vue 实现 高德地图 api 掩模、定位、天气