zoukankan      html  css  js  c++  java
  • java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)

    1. 使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户

      package lambda.stream;
      /**    
      * @author 作者:cb   
      * @version 创建时间:2019年1月4日 下午2:35:05 
               
      */
      
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;
      
      public class StreamDemo {
          public static void main(String[] args) {
              // 1.集合创建stream对象
              List<User> asList = Arrays.asList(new User("张三", 15), new User("李四", 25), new User("Tom", 10));
              Stream<User> streamList = asList.stream();
              // 找出 user age>15 的user collect(Collectors.toList()) 返回一个对应的集合 
              List<User> collect = streamList.filter(user -> user.getAge() >= 15).collect(Collectors.toList());
      //集合提供的遍历方法。。打印user对象 collect.forEach(user
      -> System.out.println(user)); } }
      public interface Stream<T> extends BaseStream<T, Stream<T>> {
      
          /**
           * Returns a stream consisting of the elements of this stream that match
           * the given predicate.
           *
           * <p>This is an <a href="package-summary.html#StreamOps">intermediate
           * operation</a>.
           *
           * @param predicate a <a href="package-summary.html#NonInterference">non-interfering</a>,
           *                  <a href="package-summary.html#Statelessness">stateless</a>
           *                  predicate to apply to each element to determine if it
           *                  should be included
           * @return the new stream
           */
          Stream<T> filter(Predicate<? super T> predicate);
       Stream<T> filter(Predicate<? super T> predicate) 接受的是一个 predicate 类型的接口参数。predicate 有一个test 的抽象boolean类型的返回值方法。该方法满足条件age>=15 返回true 则程序 向下执行,执行结果:

      User [name=张三, age=15]
      User [name=李四, age=25]

      为了方便 所以 该测试类 每个步骤分开写的,连着写:

      package lambda.stream;
      /**    
      * @author 作者:cb   
      * @version 创建时间:2019年1月4日 下午2:35:05 
               
      */
      
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;
      
      public class StreamDemo {
          public static void main(String[] args) {
              // 1.集合创建stream对象
              List<User> asList = Arrays.asList(new User("张三", 15), new User("李四", 25), new User("Tom", 10));
              Stream<User> streamList = asList.stream();
              // 找出 user age>15 的user .collect(Collectors.toList()) 返回一个对应的集合
              // List<User> collect = streamList.filter(user -> user.getAge() >=
              // 15).collect(Collectors.toList());
              // 集合提供的遍历方法。。打印user对象
              // collect.forEach(user -> System.out.println(user));
              streamList.filter(user -> user.getAge() >= 15).collect(Collectors.toList())
                      .forEach(user -> System.out.println(user));
          }
      
      }
    2. 使用stream distinct 去掉一个集合中的重复元素“:

      package lambda.stream;
      /**    
      * @author 作者:cb   
      * @version 创建时间:2019年1月4日 下午2:35:05 
               
      */
      
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;
      
      public class StreamDemo {
          public static void main(String[] args) {
              testDistinct();
          }
      
          /**
           * 去重
           */
          public static void testDistinct() {
              List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 8, 9, 7);
              List<Integer> collect = asList.stream().distinct().collect(Collectors.toList());
              collect.forEach(System.out::print);
          }
      
      }

      结果:

      12356789
    3. 指定跳过多少个数据 类似 于 for循环里面的break 例如:

      package lambda.stream;
      /**    
      * @author 作者:cb   
      * @version 创建时间:2019年1月4日 下午2:35:05 
               
      */
      
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;
      
      public class StreamDemo {
          public static void main(String[] args) {
              testSkp();
          }
      
          public static void testSkp() {
              List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
              List<Integer> collect = asList.stream().skip(5).collect(Collectors.toList());
              collect.forEach(System.out::print);
          }

      结果:

      789
    4. 取一个集合的前几条数据


      package lambda.stream;
      /**    
      * @author 作者:cb   
      * @version 创建时间:2019年1月4日 下午2:35:05 
               
      */
      
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Collectors;
      import java.util.stream.Stream;
      
      public class StreamDemo {
          public static void main(String[] args) {
              testLimit();
          }
      
          public static void testLimit() {
              List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
              List<Integer> collect = asList.stream().limit(5).collect(Collectors.toList());
              collect.forEach(System.out::print);
          }

      结果:

      12356
    5. 使用map 將集合中的每个数字 扩大 两倍 :

      package lambda.stream;
      /**    
      * @author 作者:cb   
      * @version 创建时间:2019年1月4日 下午2:35:05 
               
      */
      
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Collectors;
      
      public class StreamDemo {
          public static void main(String[] args) {
              testMap();
          }
      
          public static void testMap() {
              List<Integer> asList = Arrays.asList(1, 2, 3, 5, 6, 7, 8, 9);
              List<Integer> collect = asList.stream().map(i -> i * 2).collect(Collectors.toList());
              collect.forEach(System.out::println);
          }

      结果:


      2
      4
      6
      10
      12
      14
      16
      18

           6 .解决一个字符串数组  返回单一的字符串使用flatMap:
               

    package lambda.stream;
    /**    
    * @author 作者:cb   
    * @version 创建时间:2019年1月4日 下午2:35:05 
             
    */
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class StreamDemo {
        public static void main(String[] args) {
            flatMap();
        }
    
        public static void flatMap() {
            List<String> list = Arrays.asList("AABBBACCDED", "EDADCAJIONG ");
    
            list.stream().flatMap(item -> Arrays.stream(item.split(""))).distinct().collect(Collectors.toList())
                    .forEach(System.out::printf);

     结果:

    ABCDEJIONG 

    关于 map 和 flatMap的区别,可以了解一下。这里记录一下自己的用法 毕竟写这些 主要是给自己看 怕自己哪天忘了  回头在看看


  • 相关阅读:
    杂题
    [ AtCoder Grand Contest 031] C
    [ AtCoder Regular Contest 107 ] C
    [ 实验舱 CSP/NOIP新赛制内部挑战赛4 ] 树上询问
    [ 2020牛客NOIP赛前集训营-提高组(第六场) ] 补题
    [NOI Online #2 提高组]子序列问题
    洛谷P4317 花神的数论题
    [AHOI2009]同类分布
    洛谷P3413 SAC#1
    数位dp小结
  • 原文地址:https://www.cnblogs.com/920913cheng/p/10234570.html
Copyright © 2011-2022 走看看