Java流查找任何需要的帮助

时间:2018-06-25 12:43:03

标签: java list java-stream

我有一个包含Customer.name属性的对象。我想遍历“客户”列表,以查看名称不是“ Joe”还是“ Bob”。

如何使用Java流/查找其中的任何一个来标识名称中的任何一个不是“ Joe”还是“ Bob”

 boolean nameCheck = customers.stream().anyMatch(!c -> c.getName().equals("Joe") ||  !c.getName().equals("Bob"))

基本上,我想找到返回布尔值的最佳方法,告诉我所有客户都命名为Joe或Bob。帮助非常感谢!

2 个答案:

答案 0 :(得分:1)

您有几个选择,这里有3个使用Streams

  1. 使用allMatch检查所有人是Bob还是Joe:

    boolean onlyBobJoe = customers.stream()
                   .allMatch(c -> c.getName().equals("Joe") || c.getName().equals("Bob"));
    
  2. 使用anyMatch(开头请注意!)检查Bob和Joe都不是:

    boolean onlyBobJoe = !customers.stream()
                   .anyMatch(c ->!c.getName().equals("Joe") && !c.getName().equals("Bob"));
    
  3. 使用noneMatch

    检查Bor和Joe都不是
    boolean onlyBobJoe = customers.stream()
                  .noneMatch(c ->!c.getName().equals("Joe") && !c.getName().equals("Bob"));
    

if(onlyBobJoe) System.out.println("Only Bob, Joe's customers");
else System.out.println("One has a different name !");

答案 1 :(得分:0)

尝试.allMatch(p-> p.getName().matches("Joe|Bob"))

    public class Main {
    public static void main(String[] args) {
        ArrayList<Customer> customers =   new ArrayList<>(asList(new Customer("Joe"), new Customer("Bob")));

        customers.stream().map(Customer::getName).forEach(System.out::println);//print list
        Boolean allCustomersAreJoeOrBob =  customers.stream().allMatch(p-> p.getName().matches("Joe|Bob"));
        System.out.println("allCustomersAreJoeOrBob: "+allCustomersAreJoeOrBob+"\n");

        Customer sarasa = new Customer("Sarasa");
        customers.add(sarasa);
        customers.stream().map(Customer::getName).forEach(System.out::println);//print list
        allCustomersAreJoeOrBob =  customers.stream().allMatch(p-> p.getName().matches("Joe|Bob"));
        System.out.println("allCustomersAreJoeOrBob: "+allCustomersAreJoeOrBob+"\n");

        customers.remove(sarasa);
        customers.add(new Customer("Joe"));
        customers.stream().map(Customer::getName).forEach(System.out::println);//print list
        allCustomersAreJoeOrBob =  customers.stream().allMatch(p-> p.getName().matches("Joe|Bob"));
        System.out.println("allCustomersAreJoeOrBob: "+allCustomersAreJoeOrBob+"\n");
    }
}

结果:

Joe
Bob
allCustomersAreJoeOrBob: true

Joe
Bob
Sarasa
allCustomersAreJoeOrBob: false

Joe
Bob
Joe
allCustomersAreJoeOrBob: true