使用Streams进行ArrayList迭代

时间:2018-09-17 18:23:33

标签: java arraylist java-8 java-stream

我有清单清单。我需要根据索引从这些列表中提取项目,并使其成为单独的arraylist。我尝试通过添加

List<List<String>> multilist = new ArrayList<>();

List<List<String>> totalRecords= totalRecordsList;

List<String> targetList = totalRecords.stream().filter(e ->
     e.get(index)!=null).flatMap(List::stream) .collect(Collectors.toCollection(ArrayList::new));

multilist.add(targetList);

但是它仍然在列表列表中,而不是作为单独的arraylist对象存储,而是将所有项目组合在一起。无论我哪里出错,都能请您纠正。

谢谢

1 个答案:

答案 0 :(得分:2)

此操作:

.flatMap(List::stream)

将输入列表中的所有内容平铺到流中。

如果您只想使用每个列表的第index个元素,请将其替换为:

.map(e -> e.get(index))

总体:

totalRecords.stream()
    .filter(e -> e.get(index)!=null)
    .map(e -> e.get(index))
    .collect(Collectors.toCollection(ArrayList::new))

您可以通过反转过滤器和地图来避免重复获取操作:

totalRecords.stream()
    .map(e -> e.get(index))
    .filter(Object::nonNull)
    .collect(Collectors.toCollection(ArrayList::new))