Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Append object to list and return result in Java 8?

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?

like image 923
mxscho Avatar asked Dec 09 '16 23:12

mxscho


People also ask

How do you add an object to a List in Java?

You insert elements (objects) into a Java List using its add() method. Here is an example of adding elements to a Java List using the add() method: List<String> listA = new ArrayList<>(); listA. add("element 1"); listA.

How do you append a List to another List in Java?

Use addAll () method to concatenate the given list1 and list2 into the newly created list.

What is List of () in Java?

The List interface in Java provides a way to store the ordered collection. It is a child interface of Collection. It is an ordered collection of objects in which duplicate values can be stored. Since List preserves the insertion order, it allows positional access and insertion of elements.


2 Answers

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.

like image 109
JB Nizet Avatar answered Sep 26 '22 00:09

JB Nizet


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());
}
like image 37
Darshan Mehta Avatar answered Sep 23 '22 00:09

Darshan Mehta