使用方法引用检查布尔值匹配而不是lambda

时间:2019-04-03 10:03:10

标签: java lambda java-8 method-reference

使用方法参考来比较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 个答案:

答案 0 :(得分:2)

将第二个条件写为:

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

无需先致电map

答案 1 :(得分:2)

我们已经指出,根据您的需求,最佳选择是:

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

以此类推。

但是要直接回答您的问题,您可以使用:

list.stream().map(Account::isActive).anyMatch(Boolean::valueOf)