JAVA8新特性之Stream流

╰半橙微兮° 2022-01-14 09:47 452阅读 0赞

一,问题

上文中,大概了解了lambda表达式的书写,然后再这里再看一下stream流的使用。

二,解决方案

  1. package language.stream;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Optional;
  6. import java.util.stream.Stream;
  7. /**
  8. * 学习Java8的Stream流来操作集合或数组
  9. *
  10. * @author KOLO
  11. *
  12. */
  13. public class StreamMain {
  14. public static void main(String[] args) {
  15. // 获取stream对象
  16. getStreamObject();
  17. // 对stream对象的操作
  18. operateStreamObject();
  19. // 获得stream对象被操作后的结果
  20. getStreamResult();
  21. }
  22. /**
  23. * 获取stream对象
  24. */
  25. public static void getStreamObject() {
  26. // 通过集合获取stream对象
  27. ArrayList<Integer> list = new ArrayList<Integer>();
  28. list.add(1);
  29. list.add(3);
  30. list.add(5);
  31. Stream<Integer> listStream = list.stream();
  32. Stream<Integer> listParallelStream = list.parallelStream();
  33. // 通过数组获取stream对象
  34. Integer[] intArr = new Integer[] { 1, 2, 3, 5, 6 };
  35. Stream<Integer> arrayStream = Arrays.stream(intArr);
  36. // 通过stream的静态of方法创建一个stream流
  37. Stream<Integer> ofStream = Stream.of(1, 2, 3, 4, 5);
  38. // 通过stream的generate方法获取无限流
  39. Stream<Double> limitstrStream = Stream.generate(Math::random).limit(3); // 这里的limit是限制结果的条数
  40. limitstrStream.forEach(System.out::println);
  41. // 通过stream的方法获取流
  42. // 根据开始的数值,自增。自增后的结果放进stream中。最后再遍历
  43. Stream<Integer> stream3 = Stream.iterate(0, (x) -> x + 2).limit(10);
  44. stream3.forEach(System.out::println);
  45. }
  46. /**
  47. * 操作stream对象:操作主要有筛选与切片、映射和排序。
  48. */
  49. public static void operateStreamObject() {
  50. List<Employee> emps = Arrays.asList(new Employee(102, "李四", 59, 6666.66), new Employee(101, "张三", 18, 9999.99),
  51. new Employee(103, "王五", 28, 3333.33), new Employee(104, "赵六", 8, 7777.77),
  52. new Employee(104, "赵六", 8, 7777.77), new Employee(104, "赵六", 8, 7777.77),
  53. new Employee(105, "田七", 38, 5555.55));
  54. emps.parallelStream() // 获取了stream流对象
  55. .filter(e -> e.getWallet() > 1000) // 过滤掉钱包里少于1000的人
  56. .limit(5) // 在所有的结果中选择五个人
  57. .skip(2) // 跳过前面2个人
  58. .forEach(System.out::println); // 遍历输出
  59. List<String> strList = Arrays.asList("aaa", "bbb", "ccc", "ddd", "eee");
  60. // 将strList中每个字符转为大写
  61. strList.stream().map(String::toUpperCase).forEach(System.out::println);
  62. emps.parallelStream().map(Employee::getName).sorted().forEach(System.out::println);
  63. emps.parallelStream().sorted((x, y) -> {
  64. if (x.getAge() == y.getAge()) {
  65. return x.getName().compareTo(y.getName());
  66. } else {
  67. return Integer.compare(x.getAge(), y.getAge());
  68. }
  69. }).forEach(System.out::println);
  70. }
  71. /**
  72. * 获取stream对象被操作后的结果
  73. */
  74. public static void getStreamResult() {
  75. List<Employee> emps = Arrays.asList(new Employee(102, "李四", 59, 6666.66), new Employee(101, "张三", 18, 9999.99),
  76. new Employee(103, "王五", 28, 3333.33), new Employee(104, "赵六", 8, 7777.77),
  77. new Employee(104, "赵六", 8, 7777.77), new Employee(104, "赵六", 8, 7777.77),
  78. new Employee(105, "田七", 38, 5555.55));
  79. Optional<String> findFirst = emps.parallelStream()
  80. .map(Employee::getName)
  81. .sorted()
  82. .findFirst();
  83. System.out.println(findFirst.get());
  84. }
  85. }

上述内容参考自:https://blog.csdn.net/J080624/article/details/85060715

发表评论

表情:
评论列表 (有 0 条评论,452人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java 8特性Stream

    在Java 8中,引入了新的数据处理方式——流(Stream)。流的概念类似于物理学中的流动,能够以一种高效、灵活的方式对大量数据进行操作。 以下是一些流的主要特性: 1.

    相关 Java8特性 stream

    JDK1.8的新特性 1. 前言 JDK1.8已经发布很久了,在很多企业中都已经在使用。并且Spring5、SpringBoot2.0都推荐使用JDK1.8以上版本