我有一个包含Customer.name属性的对象。我想遍历“客户”列表,以查看名称不是“ Joe”还是“ Bob”。
如何使用Java流/查找其中的任何一个来标识名称中的任何一个不是“ Joe”还是“ Bob”
boolean nameCheck = customers.stream().anyMatch(!c -> c.getName().equals("Joe") || !c.getName().equals("Bob"))
基本上,我想找到返回布尔值的最佳方法,告诉我所有客户都命名为Joe或Bob。帮助非常感谢!
答案 0 :(得分:1)
您有几个选择,这里有3个使用Streams
:
使用allMatch
检查所有人是Bob还是Joe:
boolean onlyBobJoe = customers.stream()
.allMatch(c -> c.getName().equals("Joe") || c.getName().equals("Bob"));
使用anyMatch
(开头请注意!
)检查Bob和Joe都不是:
boolean onlyBobJoe = !customers.stream()
.anyMatch(c ->!c.getName().equals("Joe") && !c.getName().equals("Bob"));
使用noneMatch
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