Удалить клиентов из списка, если имя дублировано, а фамилия пуста - PullRequest
0 голосов
/ 03 марта 2019

Я хочу удалить дубликаты из списка объектов на основе first name, который last name равен нулю
Можем ли мы сделать это в Java 8?

 public void test() {
    List<Customer> customers = new ArrayList<>();
    Customer customer1 = new Customer();
    customer1.setFirstName("Abc");
    customer1.setLastName("def");

    Customer customer2 = new Customer();
    customer2.setFirstName("Abc");
    customer2.setLastName(null);

    Customer customer3 = new Customer();
    customer3.setFirstName("toms");
    customer3.setLastName(null);

    customers.add(customer1);
    customers.add(customer2);
    customers.add(customer3);

    customers =  customers.stream().filter(c -> {
        return c.getLastName() != null;
    }).collect(Collectors.toList());

    System.out.println(customers);

}

это мой класс Customer.class

private class Customer {
    String firstName;
    String lastName;

  //get set


}

Я не хочу удалять customer3, поскольку его четное lastName является нулевым, но не повторяется

customers сохраняет customer1 и customer3 удалить customer2 потому что firstName дублируется с customer1 и lastName равно нулю

1 Ответ

0 голосов
/ 03 марта 2019

Я сделал это в два шага, сначала собрав всех клиентов, которые имеют полные имена (и, следовательно, могут иметь дубликаты), в список имен, а затем удалив всех клиентов из исходного списка, которые имеют нулевую фамилию и существуют в моей коллекции.список

List<String> properNames = customers.stream()
        .filter(c -> c.getLastName() != null)
        .map(Customer::getFirstName)
        .collect(Collectors.toList());

customers.removeIf(c -> c.getLastName() == null
        && properNames.contains(c.getFirstName()));
...