当前位置:   article > 正文

java中stream的常用API_stream流常用api

stream流常用api

stream流式javajdk8引进过来的一个重要的特性,用来处理数据的集合。

它提供了一种流式处理数据的方式,可以进行过滤、映射、排序、归约等操作。以下是一些常用的Stream API:

  1. filter(Predicate):通过给定的条件(Predicate),过滤流中的元素,返回满足条件的元素流。

  2. map(Function):对流中的每个元素,通过给定的转换函数(Function)进行转换,返回转换后的元素流。

  3. flatMap(Function):对流中的每个元素,通过给定的转换函数(Function)进行转换,并将结果流扁平化为一个流。

  4. sorted():对流中的元素进行默认的自然排序。

  5. sorted(Comparator):对流中的元素根据给定的比较器(Comparator)进行排序。

  6. distinct():去除流中的重复元素,返回去重后的元素流。

  7. limit(long):从流中截取指定数量的元素,返回截取后的元素流。

  8. skip(long):跳过指定数量的元素,返回剩余的元素流。

  9. forEach(Consumer):对流中的每个元素执行给定的操作(Consumer)。

  10. collect(Collector):将流中的元素收集到一个容器中,如List、Set、Map等。

  11. reduce(BinaryOperator):使用指定的二元操作(BinaryOperator),对流中的元素进行归约操作,返回一个Optional。

  12. anyMatch(Predicate):判断是否至少有一个元素满足给定的条件(Predicate)。

  13. allMatch(Predicate):判断是否所有元素都满足给定的条件(Predicate)。

  14. noneMatch(Predicate):判断是否所有元素都不满足给定的条件(Predicate)。

下面是代码

stream的创建

  1. public static void main(String[] args) {
  2. //stream的创建
  3. //list
  4. ArrayList<String> list = new ArrayList<>();
  5. Collections.addAll(list,"张三更","张三丰","张大爷","张但","鹭湖宫萨达");
  6. Stream<String> stream1 = list.stream();
  7. //set
  8. Set<String> set = new HashSet<>();
  9. Collections.addAll(set,"张三更","张三丰","张大爷","张但","鹭湖宫萨达");
  10. Stream<String> stream2 = set.stream();
  11. //map
  12. Map<String, Integer> map = new HashMap<>();
  13. //使用keySet
  14. Set<String> keySet = map.keySet();
  15. Stream<String> stream3 = keySet.stream();
  16. //使用values
  17. Collection<Integer> values = map.values();
  18. Stream<Integer> stream4 = values.stream();
  19. //使用entrySet
  20. Set<Map.Entry<String, Integer>> entries = map.entrySet();
  21. Stream<Map.Entry<String, Integer>> stream5 = entries.stream();
  22. //数组
  23. String [] arr={"张三更","张三丰","张大爷","张但","鹭湖宫萨达"};
  24. Stream<String> stream6 = Arrays.stream(arr);
  25. Stream<String> stream7 = Stream.of(arr);
  26. }

stream流的中间件

  1. public static void main(String[] args) {
  2. //stream流常见的中间方法
  3. ArrayList<Student> list = new ArrayList<>();
  4. Student s1 = new Student("张三", 12, 53);
  5. Student s2 = new Student("王五", 34, 32);
  6. Student s3 = new Student("刘明", 22, 99);
  7. Student s4 = new Student("李明", 23, 666);
  8. Student s5 = new Student("盖亚", 12, 999);
  9. Collections.addAll(list,s1,s2,s3,s4,s5);
  10. //需求:找出成就大于等于60的数据,升序后,在打印
  11. list.stream()
  12. //过滤
  13. .filter(student -> student.getScore()>=60)
  14. //排序
  15. .sorted(Comparator.comparingDouble(Student::getScore))
  16. //遍历集合打印元素对象
  17. .forEach(student -> System.out.println(student));
  18. System.out.println("-----------------------------");
  19. //需求:找出年龄大于等于23,且年龄小于等于30岁的学生,并且按照年龄排序输出
  20. list.stream()
  21. //过滤
  22. .filter(student -> student.getAge()>=23&&student.getAge()<=30)
  23. //排序
  24. .sorted((o1, o2) -> o2.getAge()-o1.getAge())
  25. .forEach(System.out::println);
  26. System.out.println("-----------------------------");
  27. //需求3:取出成绩最高,的前三名学生,并输入.
  28. list.stream()
  29. .sorted((o1, o2) -> Double.compare(o2.getScore(),o1.getScore()))
  30. //获取前三的元素
  31. .limit(3)
  32. //方法声明引用
  33. .forEach(System.out::println);
  34. System.out.println("-----------------------------");
  35. //
  36. list.stream()
  37. .sorted(new Comparator<Student>() {
  38. @Override
  39. public int compare(Student o1, Student o2) {
  40. return Double.compare(o1.getScore(),o2.getScore());
  41. }
  42. })
  43. //获取最后的元素
  44. .skip(list.size()-2)
  45. .forEach(System.out::println);
  46. System.out.println("-----------------------------");
  47. //需求5:找出分数超出50的学生叫什么名字,要求去除重复的名字,在输出
  48. list.stream().filter(student -> student.getScore()>50)
  49. //
  50. .map(student -> student.getName())
  51. //去重
  52. .distinct()
  53. .forEach(System.out::println);
  54. System.out.println("-----------------------------");
  55. //使用concat连接两个stream流
  56. Stream<String> stream1 = Stream.of("张三", "王五");
  57. Stream<String> stream2 = Stream.of("小黑", "小白");
  58. Stream<String> stream = Stream.concat(stream1, stream2);
  59. stream.forEach(System.out::println);
  60. System.out.println("-----------------------------");
  61. }

stream流的终极方法

  1. public static void main(String[] args) {
  2. //Stream的常见终极方法
  3. ArrayList<Student> list = new ArrayList<>();
  4. Student s1 = new Student("张三", 12, 53);
  5. Student s2 = new Student("王五", 34, 32);
  6. Student s3 = new Student("刘明", 22, 99);
  7. Student s4 = new Student("李明", 23, 666);
  8. Student s5 = new Student("盖亚", 12, 999);
  9. Collections.addAll(list,s1,s2,s3,s4,s5);
  10. //需求1: 分数大于50的学生,有几个人
  11. long count = list.stream().filter(student -> student.getScore() > 50).count();
  12. System.out.println(count);
  13. System.out.println("-----------------------");
  14. //需求2 : 找出分数最大的学生,打印输出
  15. Optional<Student> optional = list.stream().max((o1, o2) -> Double.compare(o1.getScore(), o2.getScore()));
  16. //get()获得optional其中的元素
  17. Student student = optional.get();
  18. System.out.println(student);
  19. //optional.ifPresent 如果这个optional中的元素不为空,则---
  20. optional.ifPresent(System.out::println);
  21. System.out.println("-----------------------");
  22. //需求3:找出分数最小的学生,打印输出
  23. Student student1 = list.stream().min(((o1, o2) -> Double.compare(o1.getScore(), o2.getScore()))).get();
  24. System.out.println(student1);
  25. System.out.println("-----------------------");
  26. //需求4 找出分数超过80分的学生,放在新的集合中返回
  27. List<Student> collect = list.stream()
  28. //过滤
  29. .filter(student2 -> student2.getScore() > 80)
  30. //创建新的集合,list集合
  31. .collect(Collectors.toList());
  32. System.out.println(collect);
  33. Set<Student> collect1 = list.stream()
  34. .filter(student2 -> student2.getScore() > 80)
  35. //创建新的集合,set集合
  36. .collect(Collectors.toSet());
  37. System.out.println(collect1);
  38. //需求5 出分数超过80分的学生,放在新的集合中返回
  39. // key为学生姓名 value为学生成绩 map集合
  40. Map<String, Double> collect2 = list.stream()
  41. .filter(student2 -> student2.getScore() >= 80)
  42. //collect,集合转换 当前list转Map
  43. .collect(Collectors.toMap(k -> k.getName(), v -> v.getScore()));
  44. System.out.println(collect2);
  45. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/560848
推荐阅读
相关标签
  

闽ICP备14008679号