我在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
有没有简单的方法来解决这个问题? 谢谢你的帮助:)
答案 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);