前言这个问题是开发中偶尔遇到的一个小问题,比如如何将两个集合压缩成一个逻辑集合。如果你不明白,我们可以看一个简单的例子来说明什么是压缩集合。这篇文章不长,但还是一个比较实用的小技巧。主要内容来自国外小哥Baeldung的博客:下面给出地址https://www.baeldung.com/java-collections-zip虽然这位大佬写的很详细,但是也有一些小细节,我在这个基础上,我实地验证了一下,发现有几个坑,不过都已经填上了。案例讲解什么是压缩集合现在有两个集合:names和agesListnames=newArrayList<>(Arrays.asList("张三","李四","王舞"));List年龄=newArrayList<>(Arrays.asList(24,25,27));压缩后,我们遍历压缩后的对象,变成如下形式:张三:24李四:25王五:27是name:age键值对的形式,当然如果我们的集合比较多,可以压缩更多收藏。比如一个人的各种信息,id:name:age等。好的,我知道什么是压缩。下面我就不长篇大论了,直接给出压缩的几种形式和压缩集合的几种方法。方法一:Java8的IntStreamListnames=newArrayList<>(Arrays.asList("张三","李四","王五"));Listages=newArrayList<>(Arrays.asList(24,25,27));//方法一:Java8的IntSreamStreamstream=IntStream.range(0,Math.min(names.size(),ages.size())).mapToObj(i->names.get(i)+":"+ages.get(i));//遍历输出stream.forEach(System.out::println);这个方法比较简单,获取两个集合的流,然后转化为对象。java8可以直接使用。方法二:GuavaStreamsListnames=newArrayList<>(Arrays.asList("张三","李四","王舞"));Listages=newArrayList<>(Arrays.asList(24,25,27));//方法二:guava//第一个Streams.forEachPair(Stream.of("张三","李四","王舞"),Stream.of(1,2,3),(name,age)->System.out.println(name+":"+age));//第二种:Streamstream2=Streams.zip(names.stream(),ages.stream(),(姓名,年龄)->姓名+":"+年龄);stream2.forEach(System.out::println);//第三种:Streamstream3=Streams.mapWithIndex(Stream.of("a","b","c"),(str,index)->str+":"+索引);stream3.forEach(System.out::println);以上是几种实现方式,这个老大给了一个,自己去官网找其他类型的。另外,使用guava时,需要21或以上版本。我们可以在pom文件中添加如下依赖:com.google.guavaguava30.1-jre注意这里使用最新版本即可。其他人可能会报告错误。我试过21版,也报错。方法二:使用jOOλ(jOOL)jOOL在Java8Lambda上也提供了一些有趣的新功能,并且随着对Tuple1到Tuple16的支持,zip操作变得更加有趣//方法三:jool//第一个方法Seq>s1=Seq.of("张三","李四","王舞").zip(Seq.of(24,25,27));//第二种Seqs2=Seq.of(1,2,3).zip(Seq.of("a","b","c"),(x,y)->x+":"+y);//第三个Seq>s3=Seq.of("a","b","c").zipWithIndex();s1.forEach(System.out::println);s2.forEach(System.out::println);s3.forEach(System.out::println);Seq结果是一个压缩的元组,我们可以看一下。(tuple(1,"a"),tuple(2,"b"),tuple(3,"c"))这个方法也需要添加依赖。在pom文件中添加如下依赖:org.jooqjool-java-80.9.14ok,还有很多,基本思路就是切流然后合并。这个也可以直接用java实现。结论“zip”操作与标准的“concat”或“merge”略有不同。“concat”或“merge”操作将简单地将新集合添加到现有集合的末尾,而“zip”操作将从每个集合中取出一个元素并将它们组合起来。本文转载自微信公众号“愚公要移山”,可通过以下二维码关注。转载本文请联系愚公想移山公众号。