【问题标题】:How to get the String representation of all elements in a Java 8 stream如何获取 Java 8 流中所有元素的字符串表示形式
【发布时间】: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());

但这只会打印流对象,我怎样才能访问流中的所有项目并打印出来?

【问题讨论】:

  • 你能为这个问题想出更好的标题吗?诸如“如何打印流中的所有元素?”之类的东西。谢谢
  • 是的,可以做到,已经做到了

标签: java java-stream


【解决方案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(", "))…
猜你喜欢
  • 2014-08-23
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 2022-10-05
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多