zoukankan      html  css  js  c++  java
  • java 数据类型:Stream流 对象转换为集合collect(Collectors.toList()) ;常用方法count,limit,skip,concat,max,min

    集合对象.stream() 获取流对象,对元素批处理(不改变原集合)

    集合元素循环除了用for循环取出,还有更优雅的方式.forEach

    示例List集合获取Stream对象进行元素批处理

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @ClassName ArrayListStreamExample
     * @projectName: object1
     * @author: Zhangmingda
     * @description: XXX
     * date: 2021/4/11.
     */
    public class ArrayListStreamExample {
        public static void main(String[] args) {
            List<String> persons = new ArrayList<>();
            persons.add("李一桐");
            persons.add("刘亦菲");
            persons.add("鞠婧祎");
            persons.add("李易峰");
            persons.add("李纯");
            persons.add("李小璐");
            persons.add("李健");
            persons.add("李连杰");
            //
            persons.stream().filter(o -> o.startsWith("李")).filter(o -> o.length() >=3).forEach(System.out::println);
            List<String> liPerson = new ArrayList<>();
            persons.stream().filter(o -> o.startsWith("李")).filter(o -> o.length() >=3).forEach(o -> liPerson.add(o));
            System.out.println(liPerson); // [李一桐, 李易峰, 李小璐, 李连杰]
        }
    }

     常用方法:

    Map映射

    如果需要将流中的元素映射到另一个流中,可以使用 map 方法。
    <R> Stream<R> map(Function<? super T, ? extends R> mapper)
    Function是一个函数式接口,他有一个R apply(T t);方法,可以把T对象转化成R对象。这个就叫做映射。
    • 统计个数Count
    • 获取前几个Limit
    • 跳过前几个Skip
    • 组合concat
    • 最大最小值
      常用方法示例代码:
      import java.util.stream.Stream;
      
      /**
       * @ClassName StreamFuncExample
       * @projectName: object1
       * @author: Zhangmingda
       * @description: XXX
       * date: 2021/4/12.
       */
      public class StreamFuncExample {
          public static void main(String[] args) {
              Stream.of(1,2,3).map(num ->num *2).forEach(System.out::println); //映射输出2、4、6
              long count = Stream.of(1,3,4,5).count(); //统计个数
              System.out.println(count);
              Stream.of(1,2,3,4,5,6).limit(3).forEach(System.out::println);//前三个
              Stream.of(1,2,3,4,5,6).skip(3).forEach(System.out::println);//跳过前三个
              Stream<Integer> num = Stream.of(1,2,3);
              Stream<String> person = Stream.of("张三","李四","王五");
              Stream allStream = Stream.concat(num,person);
              allStream.forEach(System.out::println); //1,2,3, 张三","李四","王五"
              int max = Stream.of(1,2,3,4,5,6).max((num1, num2) -> num1 - num2).get(); //取最大
              System.out.println(max); //6
          }
      }
     

    Stream对象转换为集合

    collect(Collectors.toList())  

    collect(Collectors.toSet())

    collect(Collectors.toMap())

     

    public class StreamCollectCollectorsXXX {
        public static void main(String[] args) {
            Stream<String> persons = Stream.of("张三","李四","王五");
    //        List<String> personList  = persons.collect(Collectors.toList());
    //        Set<String> personSet  = persons.collect(Collectors.toSet());
            Map<String,Integer> personMap  = persons.collect(Collectors.toMap( K ->K, K ->K.length()));
            System.out.println(personMap);
        }
    }

     

  • 相关阅读:
    [LeetCode]603. 连续空余座位(Mysql、自连接)
    [LeetCode]671. 二叉树中第二小的节点(递归)
    [LeetCode] 203. 移除链表元素(链表基本操作-删除)、876. 链表的中间结点(链表基本操作-找中间结点)
    [LeetCode]26. 删除排序数组中的重复项(数组,双指针)
    C# 把引用的dll嵌入到exe文件中
    iptables规则表
    [转载]EF Code First 学习笔记:约定配置
    使用itunes同步ios时丢失照片恢复
    USB硬件远程共享解决iphone已停用
    C# 非独占延时函数 非Sleep
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14645918.html
Copyright © 2011-2022 走看看