forEach中的Java逗号“,”

时间:2015-10-24 13:58:24

标签: java foreach java-8

我在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

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

2 个答案:

答案 0 :(得分:3)

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

请考虑使用String.join()StringJoiner类。

答案 1 :(得分:1)

直接使用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);