Java stream findy требуется помощь - PullRequest
0 голосов
/ 25 июня 2018

У меня есть объект, который содержит атрибут Customer.name. Я хотел бы перебрать список клиентов, чтобы увидеть, не является ли имя «Джо» или «Боб».

Как я могу использовать поток Java / найти любой, чтобы определить, не является ли какое-либо из имен "Джо" или "Боб"

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

В сущности, я хочу найти лучший способ вернуть логическое значение, говорящее мне, что всех клиентов зовут Джо или Боб. Помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

попробуй с .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
0 голосов
/ 25 июня 2018

У вас есть несколько вариантов, здесь 3 из них, используя Streams:

  1. Убедитесь, что все Боб или Джо с allMatch:

    boolean onlyBobJoe = customers.stream()
                   .allMatch(c -> c.getName().equals("Joe") || c.getName().equals("Bob"));
    
  2. Проверьте, что никто не является ни Бобом, ни Джо с anyMatch (будьте осторожны ! в начале):

    boolean onlyBobJoe = !customers.stream()
                   .anyMatch(c ->!c.getName().equals("Joe") && !c.getName().equals("Bob"));
    
  3. Убедитесь, что никто не является ни Бором, ниДжо с 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 !");
...