У меня есть приведенный ниже код и я делаю groupingBy на основе логического значения
Map<Boolean, List<Test>> products = testList
.stream()
.collect(Collectors.groupingBy(Test::isValidUser));
Хочу собрать как Map<String, List<Test>
.
Основываясь на логическом значении, вы хотите добавить пользовательский ключ как «Действительный» и «Недействительный».
Если isValidUser
верно, вы хотите добавить ключ как «Действительный», иначе ключ должен быть «Недействительным».
Есть ли возможность сделать это в Java 11?
Примечание: без добавления переменной String в тестовый класс
Вы можете сделать это, используя тернарный оператор в функции классификатора ключей в сборщике groupingBy
. Вот как это выглядит.
Map<String, List<Test>> products = testList.stream()
.collect(Collectors.groupingBy(t -> t.isValidUser() ? "Valid" : "Invalid"));
Как вариант
.collect(Collectors.collectingAndThen(Collectors.partitioningBy( Test::isValidUser), m -> Map.of("Valid", m.get(true), "Invalid", m.get(false))))