从常量构建静态映射

时间:2016-10-24 18:05:14

标签: java java-8 java-stream

我有这种情况,我不确定为什么会这样,也许你可以帮我解决这个问题。

我有一个具有这种结构的 MyClass 类。 (有吸气剂和安装者)

public class MyClass {

private String id;
private String title;
private boolean anyBoolean;

我添加了一些静态属性,比如我们

public class MyClass {

public static final Group CONS_1 = new Group("cons_1","Cons 1", false);
public static final Group CONS_2 = new Group("cons_2","Cons 2", true);

private String id;
private String title;
private boolean anyBoolean;

public MyClass(String id, String title, boolean anyBoolean) {
        this.id = id;
        this.title = title;
        this.anyBoolean = anyBoolean;
}

仅供参考,我没有使用枚举,因为我必须序列化所有属性,并且枚举它只是序列化名称。 后来我意识到有一种方法可以通过ID来公开这些常量,例如

public static Map<String, MyClass> myMap;

我尝试过像

这样的基本方法
static {
        myMap = new HashMap<>();
        myMap.put(CONS_1.getId(), CONS_1);
    }
显然它很有效。 但是我想知道我是否可以用Stream做这个,比如

myMap = Stream.of(CONS_1, CONS_2).collect(Collectors.groupingBy(MyClass::getId));

但是没有用,因为getId()是非静态的。

所以我的问题是为什么第二种方法不起作用,因为两种方法看起来都相同?

谢谢!

1 个答案:

答案 0 :(得分:1)

最后我让它发挥作用。创建该地图的正确方法是

myMap = Stream.of(CONS_1, CONS_2).collect(Collectors.toMap(MyClass::getId, Function.identity()));

我不明白为什么编译器会抱怨静态方法。