【问题标题】:Use method reference to check boolean value match instead of lambda使用方法引用来检查布尔值匹配而不是 lambda
【发布时间】:2019-04-03 10:03:09
【问题描述】:

使用方法参考比较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;
    }   
}

感谢任何帮助!谢谢!

【问题讨论】:

    标签: java lambda java-8 method-reference


    【解决方案1】:

    将第二个条件写成这样更有意义:

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

    无需先致电map

    【讨论】:

    • true 但是如何使用带有感叹号的anyMatch if(list.stream().anyMatch(Account::!isActive)) { System.out.println("已关闭帐户"); }
    • @SKumar 您不能使用 lambda 表达式 (a -&gt; !a.isActive()) 或在您的 Account 类中定义 isInActive() 方法并使用该方法。
    • @SKumar if( ! list.stream().allMatch(Account::isActive)) { System.out.println("Have closed Account"); } 从 JDK 11 开始,您还可以使用 if(list.stream().anyMatch(Predicate.not(Account::isActive))) { System.out.println("Have closed Account"); }
    【解决方案2】:

    正如已经指出的,根据您的需要,您的最佳选择是:

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

    等等。

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

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

    【讨论】:

    • 最接近的等价物是.anyMatch(Boolean.TRUE::equals),但在这里,作为一个接近的等价物并不是真正的优势。
    • @Holger 是的,公平点我将删除“最接近的功能等效”评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多