从字符堆栈构造String的有效且简洁的方法是什么?

sha*_*wat 3 java stack java-8

假设我有一个堆栈 -

O (stack top)
L
L
E
H (stack bottom)
Run Code Online (Sandbox Code Playgroud)

将它转换为"HELLO"的简洁方法是什么?

现在我这样做 -

private static String getString(Stack<Character> charStack) {
  StringBuilder output = new StringBuilder();

  while (!charStack.isEmpty()) {
      output.append(charStack.pop());    
  }

  return output.reverse().toString();
}
Run Code Online (Sandbox Code Playgroud)

Nam*_*man 7

使用mapCollectors,做一些有问题的代码的方法是:

return charStack.stream().map(Object::toString).collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

编辑:从注释(1)(2)可见,如果清空堆栈是一个有意的操作,您可以更新代码以包括行为,如下所示:

String output = charStack.stream().map(Object::toString).collect(Collectors.joining());
charStack.clear();
return output;
Run Code Online (Sandbox Code Playgroud)

  • @marmeladze:这个*是一个减少,优化使用可变的`StringBuilder`而不是创建中间字符串对象.如果你更进一步,`charStack.stream().collect(StringBuilder :: new,StringBuilder :: append,StringBuilder :: append).toString();`使用更少的中间对象.当然,`charStack.stream().reduce("",(a,b) - > a + b,(a,b) - > a + b)`(或`charStack.stream().reduce(" ",(a,b) - > b + a,(a,b) - > b + a)`用于反转'也会起作用,但效率较低. (2认同)