Append object to list and return result in Java 8?

故事扮演 提交于 2020-08-05 02:33:17

问题


Is there a way of appending an object to a list and returning the result in one line in a functional non-imperative way? How would you do it if also the original list should not be mutated? Java 8 is allowed.

I already know how to concat two lists in one line. (Source)

List listAB = Stream.concat(listA.stream(), listB.stream()).collect(Collectors.toList());

I also know how to make a list out of objects in one line.

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

Is there anything better than replacing listB in the first line with a part of the following lines?


回答1:


You could use

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

Bt I find this a little bit convoluted. Strive for readability rather than finding single-line, more obscure solutions. Also, never use raw types as you're doing in your question.




回答2:


You can use var args and create a stream from it to be appended to the stream of the actual list, e.g:

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


来源:https://stackoverflow.com/questions/41070619/append-object-to-list-and-return-result-in-java-8

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!