GroupingBy с логическим значением, но добавьте пользовательскую строку в качестве ключа

У меня есть приведенный ниже код и я делаю groupingBy на основе логического значения

Map<Boolean, List<Test>> products = testList
        .stream()
        .collect(Collectors.groupingBy(Test::isValidUser));
        

Хочу собрать как Map<String, List<Test> .

Основываясь на логическом значении, вы хотите добавить пользовательский ключ как «Действительный» и «Недействительный».

Если isValidUser верно, вы хотите добавить ключ как «Действительный», иначе ключ должен быть «Недействительным».

Есть ли возможность сделать это в Java 11?

Примечание: без добавления переменной String в тестовый класс

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это, используя тернарный оператор в функции классификатора ключей в сборщике groupingBy. Вот как это выглядит.

Map<String, List<Test>> products = testList.stream()
        .collect(Collectors.groupingBy(t -> t.isValidUser() ? "Valid" : "Invalid"));

Как вариант .collect(Collectors.collectingAndThen(Collectors.partitionin‌​gBy( Test::isValidUser), m -> Map.of("Valid", m.get(true), "Invalid", m.get(false))))

Holger 16.05.2022 09:59

Другие вопросы по теме