如何遍历对象列表并将特定值合并到一个大列表[关闭]

Posted

技术标签:

【中文标题】如何遍历对象列表并将特定值合并到一个大列表[关闭]【英文标题】:How to traverse a List of Objects and merge specific value to one big list [closed] 【发布时间】:2022-01-01 07:21:44 【问题描述】:

标题可能听起来令人困惑,但我认为我的问题要简单得多。

这是我所拥有的:

// a List containing `Boat` objects
private final List<Boat> placedBoats;

// each Boat contains a List<Coordinate> which represents a position on a grid
public List<Coordinate> getPosition() 
    return positions;

有没有一种方法可以使用流 API 将所有 List&lt;Coordinate&gt; 合并为一个大 List&lt;Coordinate&gt;

【问题讨论】:

@Seelenvirtuose 我也这么认为,但是,我现在不知道该怎么做。你能给我一个提示吗? 为什么要特别使用 Stream API?您可以将两个列表附加到一个列表中,而不会产生 Streams 的开销。如果你有一个过滤条件,它是什么? @hfontanez 没有过滤条件。 那为什么要遍历列表呢?穿越时你在寻找什么? @hfontanez “我在找什么?” - 一个包含所有坐标的大列表。我认为流 API 可能是最简单的方法。 【参考方案1】:

是的。你可以这样做。

你流着小船。 由于每艘船都有一个坐标列表,因此您必须将它们展平到一个公共流中 然后将坐标收集到一个列表中。
List<Boat> placedBoats ...;
List<Coordinates> coordinates = placedBoats.stream()
           .flatMap(boat->boat.getCoordinates().stream())
           .toList(); // or .collect(Collectors.toList()) if pre java-16

当然,通过上述操作,坐标来源(即个别船只)的来源身份会丢失。

【讨论】:

【参考方案2】:

可能的解决方案:

List<Coordinate> placedBoatCoordinates = new ArrayList<>();
for (Boat boat : placedBoats) 
    placedBoatCoordinates.addAll(boat.getPosition());

【讨论】:

这不是一个好的解决方案。再次,更好地解释您的问题。并且不要发布您问题的潜在答案。您应该编辑原始问题或发布新问题。 @hfontanez 首先,这个答案没有错。它没有按照建议使用流,但它仍然是一种可行的方法。二、请阅读Can I answer my own question? @WJS 我在问题得到澄清之前发布了该评论。我知道任何人都可以回答他们自己的问题。我所说的是不应该发布潜在的答案,因为它们可能不是一个好的答案。这与暗示您无法回答自己的问题不同。事实上,我是第一个问为什么要专门使用流 API,而无需它也能完成同样的任务。

以上是关于如何遍历对象列表并将特定值合并到一个大列表[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何仅从系列或列表中获取特定值[关闭]

C# 合并重复列表项并将它们的第二个值求和(2D 对象列表)

嵌套字典。合并公共键并将值附加到列表中。 0 值未附加。里面的代码

遍历 JSP 中的列表对象

Java 8如何操作一个列表中的对象并将其收集到另一个列表中? [重复]

Python:遍历数据框列,检查存储在数组中的条件值,并将值获取到列表中