I need to remove all empty/null values from List<Optional<String>>.
Example:
List<Optional<String>> list = new ArrayList<>();
list.add(Optional.empty());
list.add(Optional.of("Str1"));
list.add(Optional.of("Str2"));
list.add(Optional.of("Str3"));
list.add(Optional.of("Str4"));
list.add(Optional.of("Str5"));
list.add(Optional.empty());
list.add(Optional.ofNullable(null));
Currently, I'm using one of the below approaches:
Way 1:
List<String> collect = list.stream()
.filter(Optional::isPresent)
.map(obj ->obj.get())
.collect(Collectors.toList());
Way 2:
List<Optional<String>> emptlist = new ArrayList<>();
emptlist.add(Optional.empty());
list.removeAll(emptlist);
Is there any other better way?
Collection.removeIf. Simply likelist.removeIf(o -> !o.isPresent());List<Optional<String>>." then you said in comments "-need separate copy of filtered list". So what is it ? Please provide a minimal reproducible example explaining what you expect.map(Optional::get)rather thanmap(obj ->obj.get()).