Stream 流

配合Lambda表达式,简化集合和数组的操作

一、获取Stream流对象

集合

Collection接口中的方法:stream()

单列:直接调用stream()
多列:间接获取,map.entrySet()

ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");

list.stream().forEach(s -> System.out.println(s));
Map<String, Integer> map = new HashMap<>();
map.put("aaa", 10);
map.put("bbb", 20);
map.put("ccc", 30);

Set<Map.Entry<String, Integer>> set = map.entrySet();
set.stream().forEach(s -> System.out.println(s));
/*
aaa=10
ccc=30
bbb=20
*/

数组

Arrays数组工具中的静态方法:stream(T[] array)

int[] arr2 = {
   11, 22, 33};
double[] arr3 = {
   11.1, 22.2, 33.3};

Arrays.stream(arr2).forEach(s -> System.out.println(s));
Arrays.stream(arr3).forEach(s -> System.out.println(s));

零散的数据

Steam类中的静态方法:of(T … values)

Stream.of(1, 2, 3, "abc").forEach(s -> System.out.println(s));

二、中间方法

filter()

ArrayList<String> list = new ArrayList<>();
list.add("林青霞");
list.add("张曼玉");
list.add("王祖贤");
list.add("柳岩");
list.add("张敏");
list.add("张无忌");

list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));

s.startsWith(“张”) 返回的是布尔值

limit(Long maxSize)

获取前几个元素

list.stream().limit(3).forEach(s -> System.out.println(s));

skip(Long n)

跳过前几个元素

list.stream().skip(3).forEach(s -> System.out.println(s));

distinct()

去除流中重复的元素(依赖hashCode 和equals方法,即泛型若是Student,需要重写这两个方法)

list.stream().distinct().forEach(s -> System.out.println(s));

concat(Stream a, Stream b)

Stream的静态方法,合并流a和流b为一个流

Stream<String> stream1 = list.stream().limit(4);
Stream<String> stream2 = list.stream().skip(2);
Stream.concat(stream1, stream2).forEach(s -> System.out.println(s));

注意:forEach是终结方法,流水线会被关闭,之后不能再使用,不能再调用中间方法;流1和流2合并了,就不能再使用流1。

三、终结方法

forEach()

count()

四、收集操作

把流操作后的结果,转到新集合

注意:Steam流操作,不会修改原集合!

ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
list.stream().filter(s -> s % 2 == 0).forEach(s -> System.out.print(s));

System.out.println(list);

//246810[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

collect(Collector collector)

收集Stream流,指定收器Collector,收集到新集合

Collectors工具类提供了具体的收集方式:
toList():收集到List集合中
toSet():收集到Set集合中
toMap(Function keyMapper, Function valueMapper):收集到Map集合中

List<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> collect = list.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());

System.out.println(collect);//[2, 4, 6, 8, 10]
System.out.println(list);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ArrayList<String> list = new ArrayList<>();
list.add("张三,23");
list.add("李四,24");
list.add("王五,25");

Map<String, Integer> collect = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
        .collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));

System.out.println(collect);//{李四=24, 王五=25}

相关推荐

  1. <span style='color:red;'>Stream</span><span style='color:red;'>流</span>

    Stream

    2023-12-09 13:58:02      47 阅读
  2. Stream

    2023-12-09 13:58:02       61 阅读
  3. <span style='color:red;'>Stream</span><span style='color:red;'>流</span>

    Stream

    2023-12-09 13:58:02      49 阅读
  4. <span style='color:red;'>Stream</span><span style='color:red;'>流</span>

    Stream

    2023-12-09 13:58:02      35 阅读
  5. Stream

    2023-12-09 13:58:02       42 阅读
  6. <span style='color:red;'>Stream</span><span style='color:red;'>流</span>

    Stream

    2023-12-09 13:58:02      35 阅读
  7. <span style='color:red;'>Stream</span><span style='color:red;'>流</span>

    Stream

    2023-12-09 13:58:02      43 阅读
  8. <span style='color:red;'>Stream</span><span style='color:red;'>流</span>

    Stream

    2023-12-09 13:58:02      41 阅读
  9. Stream

    2023-12-09 13:58:02       39 阅读
  10. <span style='color:red;'>stream</span><span style='color:red;'>流</span>

    stream

    2023-12-09 13:58:02      33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-09 13:58:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-09 13:58:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-09 13:58:02       82 阅读
  4. Python语言-面向对象

    2023-12-09 13:58:02       91 阅读

热门阅读

  1. 系统优化(安全,限流,数据存储)

    2023-12-09 13:58:02       56 阅读
  2. Linux---计划任务

    2023-12-09 13:58:02       43 阅读
  3. MySQL之数据库的创建指令

    2023-12-09 13:58:02       57 阅读