Удалите объекты со свойством, отсутствующим в коллекции с помощью commons-collection - PullRequest
0 голосов
/ 21 ноября 2011

Скажите, у меня есть коллекция foodGroupIds и коллекция food.Используя общие коллекции, как я могу отфильтровать продукты, которые не принадлежат ни к одной из групп продуктов?

Возможно, я на правильном пути, но не могу понять, какой предикат использовать.Может быть, придется создать свой собственный?

Collection<Long> ids = collect(
    findGoodFoodGroups(),
    invokerTransformer("getId"));

Collection<Food> food = getAllFood();
filter(food, transformedPredicate(
    invokerTransformer("getFoodGroupId"),
    ?));

В C # это будет примерно так:

var ids = FindGoodFoodGroups().Select(x => x.Id);
var goodFood = FindAllFood().Select(x => ids.Contains(x.FoodGroupId));

Я хочу, чтобы все объекты, чье свойство P типа T равнок любому T в коллекции C с объектами типа T.

1 Ответ

2 голосов
/ 21 ноября 2011

Я думаю, вы можете использовать Collection.removeAll (Коллекция) .

Простые примеры:

    Map food = new HashMap();
    food.put("appleKey", "apple");
    food.put("orangeKey", "orange");
    food.put("tomatoKey", "tomato");

    Set unmatchedKeys = new HashSet(food.keySet());
    unmatchedKeys.removeAll(Arrays.asList("orangeKey"));
    System.err.println(unmatchedKeys);

    Collection unmatchedValues = new ArrayList(food.values());
    unmatchedValues.removeAll(Arrays.asList("apple", "tomato"));
    System.err.println(unmatchedValues);

Вывод:

[appleKey, tomatoKey]
[orange]
...