标签: enum-map

Java中有类似嵌套枚举的东西吗?

我想做一个国家枚举,我可以从中访问其状态,我该怎么做?

像这样的东西:

public enum SomeEnum {

     ARGENTINA {
       BUENOS_AIRES;
     }

     UNITED_STATES {
       CALIFORNIA, FLORIDA, NEW_YORK, ALASKA;
     }

}

SomeEnum state1 = SomeEnum.ARGENTINA.BUENOS_AIRES
SomeEnum state2 = SomeEnum.UNITED_STATES.CALIFORNIA;
Run Code Online (Sandbox Code Playgroud)

java enums types enum-map enumset

4
推荐指数
1
解决办法
6105
查看次数

Java EnumMap参数混淆

我是第一次使用EnumMap,并且不明白参数传递实际上在做什么.据我所知,它只是"K.class",其中K是地图键.这很好用,但我还没有在Java的其他任何地方看到这个,我不清楚它在构造中扮演的角色.

我想这是一个理论问题,因为代码运行:"K.class"参数意味着什么,以及EnumMap需要什么?

java enum-map

3
推荐指数
1
解决办法
1038
查看次数

如何在Java的Lambda API中构建复制函数的Map

从一个s java.util.function.BiFunction映射Enum到一个值,我想构建一个EnumMap反映该映射.

例如,let E1E2be是enum类型和T任何给定类型:

 BiFunction<E1,E2, T> theBiFunction = //...anything

 EnumMap<E1,EnumMap<E2,T>> theMap = 
    buildTheMap(                     // <--  this is where the magic happens
                E1.values(), 
                E2.values(),
                theBiFunction);
Run Code Online (Sandbox Code Playgroud)

给出任何类型E1和值的对E2

E1 e1 = //any valid value...
E2 e2 = //any valid value....
Run Code Online (Sandbox Code Playgroud)

以下两个值应相等:

T valueFromTheMaps = theMap.get(e1).get(e2);
T valueFromTheFunction = theBiFunction.apply(e1,e2);

boolean alwaysTrue = valueFromTheMaps.equals(valueFromTheFunction);
Run Code Online (Sandbox Code Playgroud)

" 神奇 "发生的方法的最佳(更优雅,更高效等)实现是什么?

java lambda enum-map java-8 java-stream

3
推荐指数
1
解决办法
522
查看次数

为什么EnumMap实现会检查密钥的超类?

private boolean isValidKey(Object key) {
    if (key == null)
        return false;

    // Cheaper than instanceof Enum followed by getDeclaringClass
    Class<?> keyClass = key.getClass();
    return keyClass == keyType || keyClass.getSuperclass() == keyType;
}
Run Code Online (Sandbox Code Playgroud)

如上面方法的最后一行所示,为什么EnumMap实现会检查密钥的超类?如果没有任何东西可以从枚举中获得,为什么需要进行此项检查?

java enum-map

3
推荐指数
1
解决办法
125
查看次数

Java - 当枚举本身可以用作映射时,为什么要使用 EnumMap?

最近在读Java。所以我下面有一个枚举,它充当带有键“JESSIE”和值“我最喜欢的猫”的地图。

那么为什么有人需要使用 EnumMap 呢?谢谢

public enum Cat {
    JESSIE("My favorite cat");

    private String description;

    Cat(String description){
        this.description = description;
    }
}
Run Code Online (Sandbox Code Playgroud)

java enums enum-map

3
推荐指数
1
解决办法
2463
查看次数

奇怪的EnumMap行为

我尝试使用一个简单的java EnumMap来存储道路类型到默认速度的映射.但是我立即遇到了以下问题:

我创建了一个简单的枚举如下:

   public enum RoadCategory {

        AUTOBAHN("Autobahn", 0),
        BUNDESSTR("Bundesstrasse", 1),
        OTHER("other", -1);

        private String name;
        private int code;

        private RoadCategory(String name, int code){
            this.name = name;
            this.code = code;
        }
    }
Run Code Online (Sandbox Code Playgroud)

接下来,我创建了一个小类,试图将此枚举用作枚举映射的键:

import java.util.EnumMap;
import java.util.Map;

public class VehicleConfig {

    public static void main(String[] args) throws Exception {
        VehicleConfig v = new VehicleConfig();
        v.addSpeedMapping(RoadCategory.AUTOBAHN, 80.0);
    }

    private Map<RoadCategory,Double> speedMap;

    public VehicleConfig(){
        this.speedMap = new EnumMap<RoadCategory, Double>(RoadCategory.class);
    }

    public double addSpeedMapping(RoadCategory category, double speed) throws Exception{
        if(speedMap == null) …
Run Code Online (Sandbox Code Playgroud)

java enums enum-map

2
推荐指数
1
解决办法
292
查看次数

EnumMap引发NullPointerException

我有一个Enum和一个EnumMap<Parameters, Byte>.

我将地图放入一个类中以隐藏"字节"值.所以我有一个set(Parameter, int)set(Parameter, boolean)方法.

public enum Parameter {
    BLAH
}


public class Parameters {
    private final Map<Parameter, Byte> parameters = new EnumMap<>(Parameter.class);

    public byte set(Parameter parameter, boolean set) {
        return this.parameters.put(parameter, (byte) (set ? 0x01 : 0x00));
    }

    public byte set(Parameter parameter, int value) {
        return this.parameters.put(parameter, (byte) value);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给任何一种方法时,NPW会提出哪一点put!如果我parameters公开并且直接调用方法它就可以了.

final Parameters parameters = new Parameters();
//parameters.parameters.put(Parameter.BLAH, (byte) 0x00);
parameters.set(Parameter.BLAH, false); // NPE
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释这是对我的行为吗?

java nullpointerexception enum-map

2
推荐指数
1
解决办法
867
查看次数

为什么 EnumMap 为空值分配一个 Object 类对象?

我正在研究 Java EnumMap 实现,发现如果我将空值传递给 EnumMap,EnumMap 会分配一个 Object 类对象来代替空值。

来自 EnumMap 类的代码:

public V put(K key, V value) {
        typeCheck(key);

        int index = key.ordinal();
        Object oldValue = vals[index];
        vals[index] = maskNull(value);
        if (oldValue == null)
            size++;
        return unmaskNull(oldValue);
}

private Object maskNull(Object value) {
        return (value == null ? NULL : value);
}

private static final Object NULL = new Object() {
            public int hashCode() {
                return 0;
            }

            public String toString() {
                return "java.util.EnumMap.NULL";
            }
   };
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么 java 放置一个对象而不是直接为给定的键分配空值。java 这样做有什么好处。

java enum-map

2
推荐指数
1
解决办法
940
查看次数

从Kotlin中的值列表创建EnumMap

我想定义的扩展名,该扩展名enum class以与枚举常量相同的顺序接受值列表,并输出EnumMap

相反,我能够做的是使用作为输入List<V>的键数组创建和扩展对象Enum<K>.values()

看来困难enum class本身不是具有.values()方法的对象。因此,也许我的要求不明智。

这是一个使用列表扩展方法的工作示例。

import java.util.*

enum class Shoes(
    val title: String,
    val weight: Double) {
    WORKBOOT("tough", 11.0),
    SNEAKER("fast", 6.0),
    SLIPPER("soft", 3.0);
}

fun main(args: Array<String>) {
    val prices= listOf(11.5,8.2,3.5)
    val map = prices.enumMapOf(Shoes.values())
    map.print()
}

inline fun <reified K : Enum<K>, V> List<V>.enumMapOf(keys:Array<K>): EnumMap<K, V> {
    val map = EnumMap<K, V>(K::class.java)
    keys.forEachIndexed{i,k-> map[k]=this[i]}
    return map
}

fun <K:Enum<K>,V> EnumMap<K,V>.print() {
    this.forEach{k,v-> println("%d: %s --> %.2f".format(k.ordinal,k.name,v)) …
Run Code Online (Sandbox Code Playgroud)

enum-map kotlin kotlin-extension

1
推荐指数
2
解决办法
2061
查看次数