【问题标题】:How to use a method for filtering generic HashMap - Java如何使用过滤泛型 HashMap 的方法 - Java
【发布时间】:2017-11-26 17:05:30
【问题描述】:

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

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”的类,它有一个非静态方法“getColor()”。我有对象“myHashMap”,即汽车地图,然后声明为

HashMap<Integer, Car> myHashMap ;

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

【问题讨论】:

  • car 是 lambda 函数的参数名称。如果您不熟悉 Java 中的 lambda,请查看 Oracle 的 Java 教程。
  • 查看getObjectWithAttributeEqualTo的签名。在那里你可以注意到这个方法的第二个参数是一个函数类型。那么 car -> car.getColor() 就是 Function 的一个实例。
  • 我也无法重现您的问题。
  • 您应该提供Car 类的代码。我无法重现错误。

标签: java list lambda hashmap


【解决方案1】:

这段代码在 Eclipse Oxygen 中运行良好,我认为你的 IDE 给你一个“非静态”错误是错误的:

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

【讨论】:

  • 我使用 Netbeans。
  • 我刚刚又试了一次,我摆脱了错误:无法从静态上下文引用非静态方法 getColor()
【解决方案2】:

找到解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多