Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 运行两个流并从中生成一个对象_Java_Java 8_Java Stream - Fatal编程技术网

Java 运行两个流并从中生成一个对象

Java 运行两个流并从中生成一个对象,java,java-8,java-stream,Java,Java 8,Java Stream,我有两张单子 List<String> a = Arrays.asList( "1" , "2" , "3" ); List<String> b = Arrays.asList( "a" , "b" , "c" ); 我必须将每个元素2列表转换为上述类的对象。 产生一个Obj对象列表,如下所示- [ Obj("1","a") , Obj("2","a") , Obj("3","a") ] 我知道我只需运行一个循环就可以做到这一点 List<Obj> arr

我有两张单子

List<String> a = Arrays.asList( "1" , "2" , "3" );
List<String> b = Arrays.asList( "a" , "b" , "c" );
我必须将每个元素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]) );
}
List arrayList=new arrayList();

对于(int i=0;i给定a和b列表的大小相同,这应该可以做到

List<Obj> objList = IntStream.range(0, a.size())
    .mapToObj(i -> new Obj(a.get(i), b.get(i)))
    .collect(Collectors.toList());
List objList=IntStream.range(0,a.size())
.mapToObj(i->newobj(a.get(i),b.get(i)))
.collect(Collectors.toList());

有几种方法可以实现列表和流的Zip操作(请参见示例),但您可以在Guava streams中使用现有的方法
com.google.common.collect.streams.Zip
。这样,您的代码可能如下所示:

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))
            .collect(Collectors.toList());
final List a=Arrays.asList(“1”、“2”、“3”);
最终列表b=Arrays.asList(“a”、“b”、“c”);
List objs=Streams.zip(a.stream(),b.stream(),(pa,pb)->新Obj(pa,pb))
.collect(Collectors.toList());
之后,您可以进一步过滤流,例如:

List<Obj> objs = Streams.zip(a.stream(), b.stream(), (pa, pb) -> new Obj(pa, pb))
            .filter(obj -> StringUtils.isNotEmpty(obj.b))
            .collect(Collectors.toList());
List objs=Streams.zip(a.stream(),b.stream(),(pa,pb)->新Obj(pa,pb))
.filter(obj->StringUtils.isNotEmpty(obj.b))
.collect(Collectors.toList());

如果
b.size
我假设两个数组的大小相同。对于我的用例,两个数组的大小相同。谢谢。我们还可以了解如何仅在b.get(I)不是空字符串时添加对象吗?@nekkel add a
过滤器(I->!b.get(I).isEmpty())
在映射之前。使用该循环有什么错?没问题,只是想知道在java8中是否可以以更好的方式完成
List<Obj> objs = Streams.zip(a.stream(), b.stream(), (pa, pb) -> new Obj(pa, pb))
            .filter(obj -> StringUtils.isNotEmpty(obj.b))
            .collect(Collectors.toList());