Используйте ссылку на метод для проверки соответствия логического значения вместо лямбда-выражения - PullRequest
1 голос
/ 03 апреля 2019

Использование ссылки на метод для сравнения boolean.

Вместо (t->t) я хочу использовать ссылку на метод. Ссылка на метод применима для сопоставления не булевых значений, как указано ниже.

Полный код:

public class AccountListTest {
    public static void main(String[] args){
        List<Account> list = new ArrayList<>();
        Account a1 = new Account(true, "Test1");
        list.add(a1);
        Account a2 = new Account(false, "Test2");
        list.add(a2);

        if(list.stream().map(Account::getName).anyMatch("test1"::equalsIgnoreCase)){
            System.out.println("Contain Account with name Test1");
        }

        if(list.stream().map(Account::isActive).anyMatch(t->t)){
            System.out.println("Have Active Account");
        }
    }
}

class Account{
    private boolean active;
    private String name;
    public Account(boolean active, String name) {
        super();
        this.active = active;
        this.name = name;
    }   
}

Любая помощь приветствуется! спасибо!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Как уже было указано, ваши лучшие варианты, в зависимости от ваших потребностей:

list.stream().allMatch(Account::isActive)
list.stream().anyMatch(Account::isActive)
!list.stream().noneMatch(Account::isActive)

и т. Д.

Но чтобы напрямую ответить на ваш вопрос, вы можете использовать:

list.stream().map(Account::isActive).anyMatch(Boolean::valueOf)
2 голосов
/ 03 апреля 2019

Имеет смысл написать второе условие следующим образом:

if(list.stream().anyMatch(Account::isActive)) {
    System.out.println("Have Active Account");
}

Нет необходимости сначала вызывать map.

...