如何获取 Java 8 流中所有元素的字符串表示形式
Posted
技术标签:
【中文标题】如何获取 Java 8 流中所有元素的字符串表示形式【英文标题】:How to get the String representation of all elements in a Java 8 stream 【发布时间】:2017-01-26 17:05:19 【问题描述】:使用 Eclipse 和 Java -version 1.8
我有这个代码:
public Stream<Ship> remainingShips()
return this.b.getShips().stream().filter(s -> !s.isSunk());.
public Stream<Ship> sunkShips()
return this.b.getShips().stream().filter(s -> s.isSunk());.
我想通过调用打印出流中的所有项目
System.out.println("Sunk ships => " + this.opponent.sunkShips());
但这只会打印流对象,我怎样才能访问流中的所有项目并打印出来?
【问题讨论】:
可能对***.com/questions/14830313/…有帮助 你能为这个问题想出更好的标题吗?诸如“如何打印流中的所有元素?”之类的东西。谢谢 是的,可以做到,已经做到了 【参考方案1】:您可以遍历 Stream 的元素并打印它们:
System.out.println("Sunk ships => ");
this.opponent.sunkShips().forEach(System.out::println);
或者您可以从 Stream 生成一个列表并打印它:
System.out.println("Sunk ships => " + this.opponent.sunkShips().collect(Collectors.toList());
【讨论】:
谢谢!如果我只想在流包含超过 0 个项目时才打印流怎么办?有没有用 Java 中的流/过滤器来做到这一点的好方法? @AlexMills 为了判断一个Stream是否为空,你必须使用一些终端操作(例如findAny()
或findFirst()
,这将关闭Stream。因此我建议你制作一个列出(List<Ship> ships = this.opponent.sunkShips().collect(Collectors.toList();
)如果不为空就打印出来。
当您已经知道您只对String
表示感兴趣时,收集到List
是没有意义的。您可以使用,例如.map(Object::toString).collect(Collectors.joining(", "))
…以上是关于如何获取 Java 8 流中所有元素的字符串表示形式的主要内容,如果未能解决你的问题,请参考以下文章