运行两个流并从中创建一个对象

我有两个列表


List<String> a = Arrays.asList( "1" , "2" , "3" );

List<String> b = Arrays.asList( "a" , "b" , "c" );

和一堂课


class Obj{

   String a;

   String b;

   public Obj(String a, String b){

       this.a=a;

       this.b=b;

   }

}

我必须将每个元素 2 列表转换为上述类的对象。以这样的方式生成 Obj 的对象列表 -


[ Obj("1","a") , Obj("2","a") , Obj("3","a") ]

我知道我可以简单地通过运行一个循环来做到这一点。


List<Obj> arrayList = new ArrayList<>();


for( int i=0; i<allAttributes.size(); i++){

    arrayList.add( new Obj(a[i],b[i]) );

}

想知道它是否可以在 Java 8 中以某种优雅的方式完成。


斯蒂芬大帝
浏览 114回答 2
2回答

狐的传说

鉴于 a 和 b 列表的大小相同,这应该可以解决问题,List<Obj> objList = IntStream.range(0, a.size())&nbsp; &nbsp; .mapToObj(i -> new Obj(a.get(i), b.get(i)))&nbsp; &nbsp; .collect(Collectors.toList());

婷婷同学_

有几种方法可以为列表和流实现 Zip-Operation(例如,请参阅这篇文章com.google.common.collect.Streams.zip),但您可以使用Guava Streams 中的现有方法。这样,您的代码可能如下所示:final List<String> a = Arrays.asList("1", "2", "3");final List<String> b = Arrays.asList("a", "b", "c");List<Obj> objs = Streams.zip(a.stream(), b.stream(), (pa, pb) -> new Obj(pa, pb))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());您可以在之后进一步过滤流,例如:List<Obj> objs = Streams.zip(a.stream(), b.stream(), (pa, pb) -> new Obj(pa, pb))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(obj -> StringUtils.isNotEmpty(obj.b))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java