Java之Stream类

发布时间:2024年01月12日

1.介绍

(1)Stream流
配合Lambda表达式,简化集合和数组的操作
(2)Stream流思想
流水线思想

2.获取Stream流对象

(1)集合获取流Stream流对象
使用Collection接口中的默认方法Stream<T> stream()
注:单值集合可以直接获取Stream流对象,键值对象是间接获取Stream流对象

        //单值集合获取Stream流对象
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.stream().forEach(s -> System.out.println(s));
        //键值集合获取Stream流对象
        Map<String, String> map = new HashMap<>();
        map.put("a", "1");
        map.put("b", "2");
        map.keySet().stream().forEach(s -> System.out.println(s));
        map.values().stream().forEach(s -> System.out.println(s));
        map.entrySet().stream().forEach(s -> System.out.println(s));

(2)数组获取Stream流对象
使用Arrays数组工具类中的静态方法Stream<T> stream(T[] array)

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

(3)零散的数据获取Stream流对象
使用Stream类中的静态方法Stream<T> of(T… values)

		Stream.of("a", "b", 9, "d", 3).forEach(s -> System.out.println(s));

3.Stream流中间操作方法

注:流对象已经被使用过,就不允许再次使用了;Stream流操作,不会修改源数据
(1)Stream<T> filter(Predicate<? super T> predicate)
用于对流中的数据进行过滤

		//打印集合中以"张"开头的字符串
        ArrayList<String> list = new ArrayList<>();
        list.add("王一");
        list.add("张二");
        list.add("张三");
        list.add("李四");
        list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s));

(2)Stream<T> limit(long maxSize)
获取前几个元素

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

(3)Stream<T> skip(long n)
跳过前几个元素

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

(4)Stream<T> distinct()
去除流中重复的元素(依赖hashCode和equals方法)

 		Stream<? extends Serializable> stream = Stream.of("s", "s", 3, "d", 3);
        stream.distinct().forEach(s -> System.out.println(s));

(5)Stream<T> concat(Stream a,Stream b)
合并a和b两个流为一个流

   		Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);
        Stream<? extends Serializable> stream2 = Stream.of("s", "s", 9, "d", 3);
        Stream.concat(stream1, stream2).forEach(s -> System.out.println(s));

4.终结方法

(1)void forEach(Consumer action)
对此流的每个元素执行遍历操作

(2)long count()
返回此流中的元素数

5.Stream流的收集操作

(1)R collect(Collector collector)
开始收集Stream流,指定收集器,把Stream流操作后的结果数据转回到集合

(2)Collectors工具类提供了具体的收集方式

  • Collector <T> toList() 把元素收集到List集合中
	     Stream<String> sa = Stream.of("sa", "sc", "sd", "d");
       	 List<String> list = sa.filter(s -> s.startsWith("s")).collect(Collectors.toList());
  • Collector <T> toSet() 把元素收集到Set集合中
		Stream<String> sa = Stream.of("sa", "sc", "sd", "d");
        Set<String> set = sa.filter(s -> s.startsWith("s")).collect(Collectors.toSet());
  • Collector toMap(Function keyMapper,Function valueMapper) 把元素收集到Map集合中
ArrayList<String> list = new ArrayList<>();
        list.add("张三,23");
        list.add("李四,24");
        list.add("王五,25");
        list.add("赵六,26");
        list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) > 24)
                .collect(Collectors.toMap(s-> s.split(",")[0], s -> s.split(",")[1]))
                .forEach((k, v) -> System.out.println(k + " " + v));
文章来源:https://blog.csdn.net/Lyhdreamer/article/details/135544742
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。