Как я могу отфильтровать коллекцию напрямую по значению? - PullRequest
0 голосов
/ 04 января 2019

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

Как это:

@Override
public Collection<Sale> selectSales(String map) {
    HashSet<Sale> sales = new HashSet();

    for (Sale sale : salesList) {
        if (sale.getMap().equals(map)) {
            sales.add(sale);
        }
    }
    return sales;
}

Но я бы хотел отфильтровать коллекцию напрямую. Я прочитал, что я могу сделать это с помощью LAMBDA, пример:

list.removeIf(c -> c.getCarColor() == Color.BLUE);

Но я не знаю, как применить этот пример.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Судя по названию метода selectSales, вы не хотите удалять записи из исходного списка, вы хотите создать новую коллекцию, копируя элементы из источника и отфильтровывая некоторые значения по условию.

Условие sale.getMap().equals(mapName). Обратите внимание, что я использовал mapName вместо map, что похоже на опечатку.

salesList.stream()
         .filter(sale -> sale.getMap().equals(mapName))
         .collect(Collectors.toList());

Если предположить, что salesList не null, более надежная версия метода будет выглядеть как

public Collection<Sale> selectSales(String mapName) {
    Objects.requireNonNull(mapName, "mapName");

    return salesList.stream()
             .filter(sale -> mapName.equals(sale.getMap()))
             .collect(Collectors.toList());
}
0 голосов
/ 04 января 2019

использовать поток и filter:

salesList.stream()
         .filter(sale -> sale.getMap().equals(mapName)) // I've changed map to mapName as I am assuming that was a mistake
         .collect(Collectors.toCollection(HashSet::new));

Этот сохраняет элементы , которые удовлетворяют предоставленному предикату sale -> sale.getMap().equals(mapName).

Обратите внимание, что выше не изменяет источника, если вы хотите изменить источник, тогда выполните removeIf:

salesList.removeIf(sale -> !sale.getMap().equals(mapName));

Этот удаляет элементы , которые удовлетворяют предоставленному предикату sale -> !sale.getMap().equals(mapName).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...