将对象追加到列表并在Java 8中返回结果?

mxs*_*cho 3 java list java-8 java-stream

有没有办法将对象附加到列表并以功能性非强制方式将结果返回到一行?如果原始列表也不应该变异,你会怎么做?允许使用Java 8.

我已经知道如何在一行中连接两个列表.(来源)

List listAB = Stream.concat(listA.stream(), listB.stream()).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我也知道如何从一行中的对象列表.

List listO1 = Collections.singletonList(objectA);
List listO2 = Stream.of(objectA, objectB).collect(Collectors.toList());
List listOO = Arrays.asList(objectA, objectB);
Run Code Online (Sandbox Code Playgroud)

有没有什么比用listB第一行替换下面几行的更好的东西了?

JB *_*zet 15

你可以用

List<Foo> newList = 
    Stream.concat(list.stream(), Stream.of(fooToAdd))
          .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我发现这有点令人费解.力求可读性,而不是寻找单线,更模糊的解决方案.此外,永远不要像你在问题中那样使用原始类型.

  • 这是3条**行**。当然,这只是一项“陈述”,但这不是问题。;-) 2条语句,1行答案[here](http://stackoverflow.com/a/41071051/5221149)。还没有决定,我的回答是否是个玩笑。 (2认同)
  • @mxscho那不是*投诉*.这是一个观察,也就是对JB的评论,尽管他回答了你问题的*精神*,但他没有回答你问题的*字母*.而他做的答案,因为在你的问题的代码是用于连接两个列表,但你的问题是关于如何将单一元素添加到列表中,这样的回答显示了如何调整代码*你*显示,实际做的是. (2认同)

Dar*_*hta 6

您可以使用它var argsstream从中创建一个附加到stream实际的list,例如:

public static <T> List<T> append(List<T> list, T... args){
    return Stream.concat(list.stream(), Stream.of(args))
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)