行业资讯 2025年08月6日
0 收藏 0 点赞 908 浏览 2995 个字
摘要 :

文章目录 1.Stream的concat()方法 2.合并两个流 3.合并多个流 4.Java合并流并保留唯一元素 4.1 数字和字符串 4.2 自定义对象 学习使用Stream.concat()方法将两个流合……




  • 1.Stream的concat()方法
  • 2.合并两个
  • 3.合并多个流
  • 4.Java合并流并保留唯一元素
    • 4.1 数字和字符串
    • 4.2 自定义对象

    学习使用Stream.concat()方法将两个流合并成一个流,该流中的元素由合并的两个流的所有元素组成。

    1.Stream的concat()方法

    static <T> Stream<T> concat(Stream<? extends T> firstStream,
                                Stream<? extends T> secondStream)
    
    • 这个方法创建了一个惰性合并的流,其元素是第一个流的元素,然后是第二个流的元素。
    • 如果两个输入流都是有序的,则结果流也是有序的。
    • 如果任何一个输入流是并行的,则结果流是并行的。
    • 当结果流关闭时,两个输入流的关闭处理程序都会被调用。

    2.合并两个流

    Java示例合并两个数字流 – 获得包含来自两个流的数字的流。

    public class Main 
    {
      public static void main(String[] args) 
      {
        Stream<Integer> firstStream = Stream.of(1, 2, 3);
          Stream<Integer> secondStream = Stream.of(4, 5, 6);
           
          Stream<Integer> resultingStream = Stream.concat(firstStream, secondStream);
           
          System.out.println( resultingStream.collect(Collectors.toList()) );//[1, 2, 3, 4, 5, 6]
      }
    }

    3.合并多个流

    Java示例合并四个数字流 – 获得包含来自所有流的数字的流。请注意,我们对Stream.concat()函数进行了静态导入,使代码更易读。

    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    import static java.util.stream.Stream.*;
    
    public class Main 
    {
      public static void main(String[] args) 
      {
        Stream<Integer> first = Stream.of(1, 2);
          Stream<Integer> second = Stream.of(3,4);
          Stream<Integer> third = Stream.of(5, 6);
          Stream<Integer> fourth = Stream.of(7,8);
           
          Stream<Integer> resultingStream = Stream.concat(first, concat(second, concat(third, fourth)));
           
          System.out.println( resultingStream.collect(Collectors.toList()) );//[1, 2, 3, 4, 5, 6, 7, 8]
      }
    }
    

    4.Java合并流并保留唯一元素

    4.1 数字和字符串

    在合并两个流时,我们可以使用distinct() API,结果流将只包含唯一不重复的元素。

    public class Main 
    {
      public static void main(String[] args) 
      {
        Stream<Integer> firstStream = Stream.of(1, 2, 3, 4, 5, 6);
        Stream<Integer> secondStream = Stream.of(4, 5, 6, 7, 8, 9);
     
        Stream<Integer> resultingStream = Stream.concat(firstStream, secondStream)
                            .distinct();
     
        System.out.println( resultingStream.collect(Collectors.toList()) );//[1, 2, 3, 4, 5, 6, 7, 8, 9]
      }
    }
    

    4.2 自定义对象

    在合并自定义对象流的情况下,我们可以在流迭代期间去除重复的元素。我们可以使用distinctByKey()函数,以下是为Java流中根据对象属性进行独特性检查而创建的示例。

    public class Main 
    {
      public static void main(String[] args) 
      {
        Stream<Employee> stream1 = getEmployeeListOne().stream();
        Stream<Employee> stream2 = getEmployeeListTwo().stream();
         
        Stream<Employee> resultingStream = Stream.concat(stream1, stream2)
            .filter(distinctByKey(Employee::getFirstName));
         
        System.out.println( resultingStream.collect(Collectors.toList()) );
      }
       
      public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor)
      {
          Map<Object, Boolean> map = new ConcurrentHashMap<>();
          return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
      }
     
      private static ArrayList<Employee> getEmployeeListOne() 
      {
        ArrayList<Employee> list = new ArrayList<>();
        list.add( new Employee(1l, \"Lokesh\", \"Gupta\") );
        list.add( new Employee(5l, \"Brian\", \"Piper\") );
        list.add( new Employee(7l, \"Charles\", \"Piper\") );
        list.add( new Employee(6l, \"David\", \"Beckham\") );
            return list;
      }
       
      private static ArrayList<Employee> getEmployeeListTwo() 
      {
        ArrayList<Employee> list = new ArrayList<>();
        list.add( new Employee(2l, \"Lokesh\", \"Gupta\") );
        list.add( new Employee(4l, \"Brian\", \"Piper\") );
        list.add( new Employee(3l, \"David\", \"Beckham\") );
            return list;
      }
    }
    

    程序输出:

    [
    Employee [id=1, firstName=Lokesh, lastName=Gupta], 
    Employee [id=5, firstName=Brian, lastName=Piper], 
    Employee [id=7, firstName=Charles, lastName=Piper], 
    Employee [id=6, firstName=David, lastName=Beckham]]
    

    在评论区留下与Java 8中合并两个或多个对象流相关的问题。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9587.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号