如何获取 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&lt;Ship&gt; ships = this.opponent.sunkShips().collect(Collectors.toList();)如果不为空就打印出来。 当您已经知道您只对String 表示感兴趣时,收集到List 是没有意义的。您可以使用,例如.map(Object::toString).collect(Collectors.joining(", "))

以上是关于如何获取 Java 8 流中所有元素的字符串表示形式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 8 lambda 从流中获取一系列项目?

从 java 8 流中的列表中过滤值

字节流字符流中

如何在java中检查流中的参数? [关闭]

如何确保 java8 流中的处理顺序?

03Java 8 - Collectors.joining() 详解