如何使用方法过滤泛型HashMap - Java

时间:2017-11-23 13:12:58

标签: java list lambda hashmap

让我们考虑以下方法,它允许我获取通用Map的项目,将具有geneiric属性==的项目过滤为值(它不是我的代码):

import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Utilities {

    public static <T> List<T> getObjectWithAttributeEqualTo(Map<?, T> MyMap_Arg, Function<T, ?> MY_AttributeValueExtractor_Arg, Object MY_AttributeValueToEqual_Arg) {
         return  MyMap_Arg.values().stream()
        .filter(o -> MY_AttributeValueExtractor_Arg.apply(o).equals(MY_AttributeValueToEqual_Arg))
        .collect(Collectors.toList());
    }
}

问题:如何调用和使用此方法?

让我们说我有一个名为“Car&#39;使用NOT STATIC方法&#39; getColor()&#39;。我有对象&#39; myHashMap&#39;,这是汽车的地图,然后声明为

HashMap<Integer, Car> myHashMap ;

我想要例如获取myHashMap中的红色汽车列表。

2 个答案:

答案 0 :(得分:1)

这个代码在Eclipse Oxygen中运行良好,我认为你的IDE错误地给你一个不静态的&#39;错误:

 List<Car> redCars = getValuesWithAttributeEqualTo(myHashMap, Car::getColor, "red");

答案 1 :(得分:0)

找到解决方案:

List<Car> redCars = Utilities.getObjectWithAttributeEqualTo(myHashMap, object->object.getColor(), "red");