美文网首页Java干货分享
在Java中压缩集合

在Java中压缩集合

作者: 淡定_蜗牛 | 来源:发表于2019-03-05 10:45 被阅读0次

    1.简介

    在本教程中,我们将说明如何将两个集合压缩到一个逻辑集合中。

    “ zip”操作与标准“concat”或“merge”略有不同。虽然“concat”或“merge”操作只是在现有集合的末尾添加新集合,但“ zip”操作将从每个集合中获取元素并将它们组合在一起。

    核心库不隐式支持“ zip”,但肯定有第三方库可以实现这种有用的操作。

    考虑两个列表,一个列出人名,另一个列出他们的年龄。

    List<String> names = new ArrayList<>(Arrays.asList("John", "Jane", "Jack", "Dennis"));
    
    List<Integer> ages = new ArrayList<>(Arrays.asList(24, 25, 27));
    

    在压缩之后,我们最终得到了来自这两个集合中相应元素的名称 - 年龄对。

    2.使用Java 8 IntStream

    使用核心Java,我们可以使用IntStream生成索引,然后使用它们从两个集合中提取相应的元素:

    IntStream
      .range(0, Math.min(names.size(), ages.size()))
      .mapToObj(i -> names.get(i) + ":" + ages.get(i))
      // ...
    

    3.使用Guava Streams

    Google Guava 21 在Streams类中提供了一个zip帮助方法。这消除了创建和映射索引的所有麻烦,并减少了输入和操作的语法:

    Streams
      .zip(names.stream(), ages.stream(), (name, age) -> name + ":" + age)
      // ...
    

    4.使用jOOλ(jOOL)

    jOOL还提供了一些关于Java 8 Lambda的迷人补充,并且在Tuple1到Tuple16的支持下, zip操作变得更加有趣:

    Seq
      .of("John","Jane", "Dennis")
      .zip(Seq.of(24,25,27));
    

    这将生成包含压缩元素元组的Seq的结果:

    (tuple(1, "a"), tuple(2, "b"), tuple(3, "c"))
    

    jOOL的zip方法提供了提供自定义转换功能的灵活性:

    Seq
      .of(1, 2, 3)
      .zip(Seq.of("a", "b", "c"), (x, y) -> x + ":" + y);
    

    或者如果只想索引索引,他可以使用jOOL提供的zipWithIndex方法:

    Seq.of("a", "b", "c").zipWithIndex();
    
    image

    欢迎大家关注公众号:「Java知己」,关注公众号,回复「1024」你懂得,免费领取 30 本经典编程书籍。关注我,与 10 万程序员一起进步。 每天更新Java知识哦,期待你的到来!

    image

    相关文章

      网友评论

        本文标题:在Java中压缩集合

        本文链接:https://www.haomeiwen.com/subject/iicnuqtx.html