• Java StreamAPI使用


    目录

    一、Stream 

    二、中间操作

    1.筛选与切片操作

    2.映射

    3.排序

    三、终止操作

    1.匹配与查找

    2.归约

    3.收集


    一、Stream 

    1.Stream关注的是对数据的运算,与CPU打交道,集合关注的是数据的存储,与内存打交道

    2.Stream不会存储元素

                   不会改变源对象,相反,他们会返回一个持有结果的新Stream

                   操作是延迟执行的

    3.执行流程:实例化-》中间操作-》终止操作

    4.中间操作链,用于对数据源进行处理 ,一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用

    二、中间操作

    1.筛选与切片操作

    建立数据Person,便于后续操作。

    1. package StreamAPI;
    2. import java.util.Objects;
    3. public class Friends {
    4. private String name;
    5. private int age;
    6. public Friends() {
    7. }
    8. public Friends(String name, int age) {
    9. this.name = name;
    10. this.age = age;
    11. }
    12. /**
    13. * 获取
    14. * @return name
    15. */
    16. public String getName() {
    17. return name;
    18. }
    19. /**
    20. * 设置
    21. * @param name
    22. */
    23. public void setName(String name) {
    24. this.name = name;
    25. }
    26. /**
    27. * 获取
    28. * @return age
    29. */
    30. public int getAge() {
    31. return age;
    32. }
    33. /**
    34. * 设置
    35. * @param age
    36. */
    37. public void setAge(int age) {
    38. this.age = age;
    39. }
    40. public String toString() {
    41. return "Friends{name = " + name + ", age = " + age + "}";
    42. }
    43. @Override
    44. public boolean equals(Object o) {
    45. if (this == o) return true;
    46. if (o == null || getClass() != o.getClass()) return false;
    47. Friends friends = (Friends) o;
    48. return age == friends.age && Objects.equals(name, friends.name);
    49. }
    50. @Override
    51. public int hashCode() {
    52. return Objects.hash(name, age);
    53. }
    54. }
    1. package StreamAPI;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class FriendsData {
    5. public static List getlist(){
    6. List list=new ArrayList<>();
    7. list.add(new Friends("李博",23));
    8. list.add(new Friends("蒲汶文",21));
    9. list.add(new Friends("邱志豪",24));
    10. return list;
    11. }
    12. }
    1. @Test
    2. public void test01(){
    3. Listlist=FriendsData.getlist();
    4. Streamstream=list.stream();
    5. //按条件查询
    6. stream.filter(e->e.getAge()>23).forEach(System.out::println);
    7. System.out.println("___________________________________");
    8. //截断流,使其不超过给定数量
    9. list.stream().limit(2).forEach(System.out::println);
    10. System.out.println("___________________________________");
    11. //跳过元素,返回一个除去前n个元素的流
    12. list.stream().skip(2).forEach(System.out::println);
    13. System.out.println("___________________________________");
    14. //筛选
    15. list.add(new Friends("邱志豪",35));
    16. list.add(new Friends("邱志豪",35));
    17. list.stream().distinct().forEach(System.out::println);
    18. }

    2.映射

    1. package StreamAPI;
    2. import org.junit.Test;
    3. import java.util.ArrayList;
    4. import java.util.Arrays;
    5. import java.util.Comparator;
    6. import java.util.List;
    7. import java.util.stream.Stream;
    8. //中间操作
    9. //映射
    10. public class demo2 {
    11. //map()接收一个函数作为参数,将元素转换成其他形式或提取信息
    12. @Test
    13. public void test01(){
    14. List list = Arrays.asList("aa","bb");
    15. System.out.println(list);
    16. Stream stream = list.stream();
    17. stream.map(str->str.toUpperCase()).forEach(System.out::println);
    18. }
    19. //flatmap()接收一个函数作为参数,将流中的每个值都换成一个流,然后把所有流返回
    20. @Test
    21. public void test02(){
    22. List list = Arrays.asList("aa","bb","cc");
    23. Stream stream = list.stream();
    24. stream.flatMap(demo2::function).forEach(System.out::println);
    25. }
    26. public static Stream function(String str){
    27. Listlist=new ArrayList<>();
    28. for (Character c : str.toCharArray()) {
    29. list.add(c);
    30. }
    31. return list.stream();
    32. }
    33. }

    3.排序

    1. @Test
    2. public void test03(){
    3. //自然排序
    4. Listlist=Arrays.asList(12,43,45,23,1);
    5. Stream stream = list.stream();
    6. stream.sorted().forEach(System.out::println);
    7. //定制排序
    8. List getlist = FriendsData.getlist();
    9. Stream stream1 = getlist.stream();
    10. stream1.sorted((o1,o2)-> o1.getAge()- o2.getAge()).forEach(System.out::println);
    11. }

     

    三、终止操作

    1.匹配与查找

    aLLMatch(Predicate p)—检查是否匹配所有元素。
    anyMatch( Predicate p)—检查是否至少匹配一个元素。

    noneMatch( Predicate p)—-检查是否没有匹配的元素。findFirst—-返回第一个元素
    findAny—返回当前流中的任意元素count—返回流中元素的总个数
    max ( Comparator c)—返回流中最大值
    min(Comparator c)—返回流中最小值
    forEach(Consumer c)—内部迭代

    1. @Test
    2. public void test(){
    3. List getlist = FriendsData.getlist();
    4. Stream stream = getlist.stream();
    5. boolean b = stream.allMatch(e -> e.getAge() > 10);
    6. System.out.println(b);
    7. }

     

    2.归约

    1. //reduce():可以将流中的元素反复结合起来,得到一个值。
    2. @Test
    3. public void test(){
    4. Listl1=Arrays.asList(1,2,3,4,5,6);
    5. Stream stream = l1.stream();
    6. Integer reduce = stream.reduce(0, Integer::sum);
    7. System.out.println(reduce);
    8. List l2 = FriendsData.getlist();
    9. Stream stream1 = l2.stream();
    10. Stream integerStream = stream1.map(e -> e.getAge());
    11. Optional reduce1 = integerStream.reduce((a, b) -> a + b);
    12. System.out.println(reduce1);
    13. }

    3.收集

    1. //收集
    2. @Test
    3. public void test02(){
    4. List l2 = FriendsData.getlist();
    5. Stream stream1 = l2.stream();
    6. List collect = stream1.collect(Collectors.toList());
    7. System.out.println(collect);
    8. }

  • 相关阅读:
    unity3d-Animation&&Animator接口(基本使用)
    《docker基础篇:Docker常规安装简介》包括docker常规安装总体步骤、安装tomcat、安装mysql、安装redis、安装nginx
    maven.类包冲突解决案例
    微服务治理之道:构建可伸缩和高可用的系统
    Python中输入输出函数input和print用法
    3D 生成重建004-DreamFusion and SJC :TEXT-TO-3D USING 2D DIFFUSION
    Linux 删除大量小文件的两种方案 | 运维进阶
    亚马逊云科技的AI新引擎,如何助力企业应对“乌卡时代”?
    新冠疫情数据建模分析
    61:第五章:开发admin管理服务:14:开发【友情链接列表查询,接口】;(核心是:理解MongoDB,查询数据的逻辑)
  • 原文地址:https://blog.csdn.net/wangcheng_BI/article/details/127778653