Java 多列表迭代和数据之间的关联
我有两个ArrayList->一个是标签字符串,第二个是对象,对象上有一个可以设置标签的变量。 两个列表的大小相同。 在Java8中,有没有一种方法可以使用流API同时整洁地完成这项工作 我可以通过使用for循环并同时设置它们来做到这一点,但是有更好的方法使用Streams API吗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
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);