如何遍历对象列表并将特定值合并到一个大列表[关闭]
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<Coordinate>
合并为一个大 List<Coordinate>
?
【问题讨论】:
@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 值未附加。里面的代码