压缩Java集合

压缩Java集合

本文我们探讨如何压缩两个集合至一个逻辑集合。压缩操作与连接或合并稍微有些不同,后者是简单在原集合后面增加新的集合,压缩操作从每个集合中取一个元素然后合并它们。默认Java库没有提供压缩功能,但一些第三方库提供了类似功能。

假如有两个列表,一个名称集合,另一个是年龄集合。

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

压缩之后,我们从两个列表中得到名称、年龄对结构。

1. 使用Java8 IntStream

使用Java Api,可以生成IntStream索引然后使用索引从两个集合中抽取元素:

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

2. 使用Guava Stream

Google Guava 的Streams类提供zip工具方法,其消除了创建、映射索引的所有麻烦,并将语法简化为输入和操作:

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

3. 使用jOOλ (jOOL)

jOOL也为Java 8 Lambda提供了一些有趣的附加功能,利用Tuple1到Tuple16,压缩操作变得非常有意思:

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

结果生成一个序列,其中包括一系列元祖:

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

jOOL的压缩方法也提供了自定义转换功能:

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

或者如果希望直接使用索引压缩,可以使用zipWithIndex 方法:

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

4. 总结

本文介绍了Java 几种集合压缩方法实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值