Java 多列表迭代和数据之间的关联

Java 多列表迭代和数据之间的关联,java,list,java-stream,Java,List,Java Stream,我有两个ArrayList->一个是标签字符串,第二个是对象,对象上有一个可以设置标签的变量。 两个列表的大小相同。 在Java8中,有没有一种方法可以使用流API同时整洁地完成这项工作 我可以通过使用for循环并同时设置它们来做到这一点,但是有更好的方法使用Streams API吗 List items=new ArrayList(); 对于(int i=0;i我们可以使用IntStream.range()来生成索引范围,并使用这些索引,我们可以从项目列表中填充每个项目: List<It

我有两个ArrayList->一个是标签字符串,第二个是对象,对象上有一个可以设置标签的变量。 两个列表的大小相同。 在Java8中,有没有一种方法可以使用流API同时整洁地完成这项工作

我可以通过使用for循环并同时设置它们来做到这一点,但是有更好的方法使用Streams API吗

List items=new ArrayList();

对于(int i=0;i我们可以使用
IntStream.range()
来生成索引范围,并使用这些索引,我们可以从
项目列表中填充每个项目:

List<Item> list = IntStream.range(0, labels.size())
                                   .mapToObj(idx -> { Item item = items.get(idx); item.setLabel(labels.get(idx)); return item; })
                                   .collect(Collectors.toList());

不,使用流API不会使它比现在更好。但是,您应该使用列表大小而不是硬编码11。您还应该避免创建ArrayList的匿名子类来填充它,并更好地格式化代码。为什么不使用映射而不是列表?这样您就可以在类型字符串的th键和类型Item的值。一个集合=轻松迭代一个循环就足够了,在同一个循环中添加项并设置标签。(这样做是一种良好的区域性)
final AtomicInteger idx = new AtomicInteger();
List<Item> result = items.stream()
                         .collect(ArrayList::new, 
                          (list, item) -> { item.setLabel(labels.get(idx.getAndIncrement())); 
                                            list.add(item);
                                          }, 
                          ArrayList::addAll);