Stream流

Stream流的获取

单列集合: 集合对象.stream();

双列集合: 不能直接获取,需要间接获取

​ 集合对象.KeySet().stream();

​ 集合对象.entrySet().stream();

数组: Arrays.stream(数组名);

同种数据类型的多个数据: Stream.of(1,2,3....);

遍历单列

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

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

遍历双列

HashMap<String,Integer> hm = new HashMap<>();
hm.put("aa",11);
hm.put("bb",22);
hm.put("cc",33);
hm.put("dd",44);

hm.keySet().stream().forEach(s-> System.out.println(s)); //只获取键
hm.entrySet().stream().forEach(s-> System.out.println(s)); //获取键和值

遍历数组

int[] arr = {1,2,3,4,5,6};
Arrays.stream(arr).forEach(s-> System.out.println(s));

遍历同种数据类型的多个数据

Stream.of(1,2,3,4,5,6).forEach(s-> System.out.println(s));

常用中间方法

1641883989303.png

ArrayList<String> list = new ArrayList<>();
list.add("王王");
list.add("王王王");
list.add("金金");
list.add("金金金");
list.add("金金金");
list.add("金金金");

ArrayList<String> list2 = new ArrayList<>();
list2.add("王王");
list2.add("王王王");
list2.add("金金");
list2.add("金金金");


//list.stream().limit(2).forEach(s-> System.out.println(s));  //limit(2)截取前两个
//list.stream().skip(2).forEach(s-> System.out.println(s));  //skip(2)跳过前两个
//Stream.concat(list.stream(),list2.stream()).forEach(s-> System.out.println(s)); //Stream.concat(a,b)合并a和b两个流为一个流
//list.stream().distinct().forEach(s-> System.out.println(s)); //distinct()去除流中重复的元素
//System.out.println(list.stream().count()); //返回流中的个数

filter

ArrayList<String> list = new ArrayList<>();

list.add("王王");
list.add("王王王");
list.add("金金");
list.add("金金金");

//filter方法获取流中的每一个数据
//而test方法中的s,就依次表示流中的每一个数据
//如果判断的结果为true,则数据留下,false则不要
list.stream()
    .filter(s -> s.startsWith("王"))  //开头是 王的
    .forEach(s -> System.out.println(s));  //遍历符合条件的数据
}

收集方法

ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
    list.add(i);
}

//filter负责过滤数据
//collect负责收集数据
//获取流中剩余的数据,但是他不负责创建容器,也不负责把数据添加到容器中
//Collectors.toList() 在底层会创建一个List集合 并把所有的数据添加到list集合中
List<Integer> res = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(res);

//List 和 Set 区别在于 List可以保留重复的内容 Set则不会保留重复的
Set<Integer> res2 = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toSet());
System.out.println(res2);

}

Map

//保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
        ArrayList<String> list = new ArrayList<>();
        list.add("zhangsan,23");
        list.add("lisi,24");
        list.add("wangwu,25");

        Map<String, Integer> map = list.stream().filter(s -> {
            String[] split = s.split(",");
            int age = Integer.parseInt(split[1]);
            return age >= 24;
            //collect方法只能获取到流中剩余的每一个数据
            //在底层不能创建容器,也不能把数据添加到容器中

            //Collectors.toMap 创建一个map集合并将数据添加到集合当中
            // s 依次表示流中的每一个数据
            // 第一个lambda表达式是如何获取到Map中的键
            // 第二个lambda表达式是如何获取到Map中的值
        }).collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])
        ));

        System.out.println(map);
最后修改:2022 年 01 月 11 日
如果觉得我的文章对你有用,请随意赞赏