Почему Java Stream не получает список <> не может быть преобразован в логическое значение - PullRequest
0 голосов
/ 08 октября 2019

У меня есть следующая сущность, которая является родительской для сущности субстанции и синонима, она содержит объект субстанции и список объектов синонимов

public class SubstanceEntry {

    private Substance substance;
    private List<Synonym> synonymList;

    public Substance getSubstance() {
        return substance;
    }

    public void setSubstance(Substance substance) {
        this.substance = substance;
    }

    public List<Synonym> getSynonymList() {
        return synonymList;
    }

    public void setSynonymList(List<Synonym> synonymList) {
        this.synonymList = synonymList;
    }
}

, затем, когда я пытаюсь получить getSynonymList с getSynonymList()

List<SubstanceEntry> substanceStruct;
substanceStruct.add(substance);
substanceStruct.addAll(synonymList);

substanceStruct.stream()
        .filter(substanceEntry -> substanceEntry.getSynonymList()).collect(Collectors.toList());

компилятор выводит сообщение об ошибке:

Неверный тип возврата в лямбда-выражении List<Synonym> не может быть преобразован в логическое значение.

Почему?

Редактировать. Теперь я изменил фильтр на .map, теперь, когда я пытаюсь назначить его переменной списка, он также жалуется, см. Изображение ниже. Может кто-нибудь объяснить мне, что происходит? enter image description here

1 Ответ

3 голосов
/ 08 октября 2019

Сообщение об ошибке довольно четкое и значимое.

Лямбда substanceEntry -> substanceEntry.getSynonymList() возвращает List<Synonym>, который не соответствует Predicate, ожидаемому filter, т.е. Predicate<SubstanceEntry>.

Скорее всего, вы ищете map или flatMap вместо filter или, если вам действительно требуется filter, убедитесь, что указан правильный Predicate<SubstanceEntry>, т. е. лямбда, которая возвращает логическое значение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...