I have the following list:
var list = Arrays.asList("a", "b", "c");
I want to achieve something like that:
// "a, "
// "b, "
// "c"
So I did that:
var formattedList = list.stream()
.map(el -> el + ", ")
.collect(Collectors.toList());
It is working almost fine:
// "a, "
// "b, "
// "c, "
but as you can see I don't know how to "ommit" last element in my stream.
Could someone help me achieve that?
Tahas answer is great if you have a list, but if you for some use case have a stream you can just just do.
String result = list.stream()
.collect(Collectors.joining(","));
You could use .limit() to limit the elements of the original list that are streamed:
Stream.concat(
list.stream().map(el -> el + ", ").limit(list.size() - 1),
Stream.of(list.get(list.size() - 1)))
.collect(Collectors.toList());
You can use String.join()
var list = Arrays.asList("a", "b", "c");
String.join(",", list) // returns a,b,c
I assumed you wanted to join the elements. But if you don't, I think stream api is not suitable for this. Traditional iterator would work better. Because your requirement is based on index of the element. In streams, index information is not provided.