【问题标题】:Java comma "," in forEach [duplicate]forEach中的Java逗号“,” [重复]
【发布时间】:2015-10-24 13:58:24
【问题描述】:

在我的 java 项目中打印逗号时遇到了一点问题。在forEach 部分中,程序总是打印出“,”>,即使在最后一个单词之后...查看输出

.listener("lookAround", (Game g, String action, AbstractGameObject object, Object retVal) -> {
    System.out.print("You see: \n\t");

    if (g.getItemsInRoom((Room) object).isEmpty() && g.getDoorsInRoom((Room) object).isEmpty())
       System.out.print("nothing");

    g.getItemsInRoom((Room) object)
                     .stream()
                     .forEach(item -> System.out.print(item.getName() + ", "));

    g.getDoorsInRoom((Room) object)
                     .stream()
                     .forEach(door -> System.out.print(door.getName() + ", "));
    System.out.println("\n");
})

输出:

You see:    
Black Wooden door, Brown Wooden door,

我想要输出:

You see:    
Black Wooden door, Brown Wooden door

有没有简单的方法来解决这个问题? 谢谢你的帮助:)

【问题讨论】:

    标签: java foreach java-8


    【解决方案1】:

    我认为您不应该在 forEach lambda 中打印。实际上我什至不确定你应该在那里使用stream API。

    考虑改用String.join()StringJoiner 类。

    【讨论】:

      【解决方案2】:

      直接使用StringJoiner,而不是通过Stream API,让您无需额外代码即可处理空箱:

      StringJoiner j=new StringJoiner(", ").setEmptyValue("nothing");
      g.getItemsInRoom((Room)object).forEach(o -> j.add(o.getName()));
      g.getDoorsInRoom((Room)object).forEach(o -> j.add(o.getName()));
      System.out.println("You see: \n\t"+j);
      

      【讨论】:

      • 非常感谢,您的解决方案帮了大忙:)
      猜你喜欢
      • 1970-01-01
      • 2021-06-23
      • 2015-03-29
      • 1970-01-01
      • 2013-02-20
      • 2021-04-05
      • 2016-11-02
      • 2012-02-17
      • 1970-01-01
      相关资源
      最近更新 更多