Java 如何将长值转换为字符串集

Java 如何将长值转换为字符串集,java,Java,我有一些带有值的地图: private static Map<String, Long> hodnotyUdaju = new HashMap<String, Long>(); static { hodnotyUdaju.put("a", 1L); hodnotyUdaju.put("b", 2L); hodnotyUdaju.put("b", 4L); hodnotyUdaju.put("d", 8L); hodnotyUdaj

我有一些带有值的地图:

private static Map<String, Long> hodnotyUdaju = new HashMap<String, Long>();

static {
    hodnotyUdaju.put("a", 1L);
    hodnotyUdaju.put("b", 2L);
    hodnotyUdaju.put("b", 4L);
    hodnotyUdaju.put("d", 8L);
    hodnotyUdaju.put("e", 16L);
    hodnotyUdaju.put("f", 32L);
    hodnotyUdaju.put("g", 64L);
    hodnotyUdaju.put("h", 128L);
    hodnotyUdaju.put("i", 256L);
    hodnotyUdaju.put("j", 512L);
    .
    .
    .
}
以及将值集转换为长值的方法

public static long bitovaHodnotaSeznamuUdaju(Set<String> udaje) {
    long bitovaHodnota = 0;

    for (String udaj : udaje) {
        Long tmp = hodnotyUdaju.get(udaj);
        if (tmp != null)
            bitovaHodnota += tmp;
    }

    return bitovaHodnota;
}
如何实现此方法,反之亦然?我需要从长创建字符串集

更新

Methods应该如下所示:

public static Set<String> bin2Udaje(long binUdaje) {
    Set<String> udaje = new HashSet<String>();
    for (Map.Entry<String, Long> entry : hodnotyUdaju.entrySet()) {
        if (udaje some operation entry.getValue() ) {
            udaje.add(entry.getKey());
        }
        return udaje;

    }
}

听起来你真的应该使用枚举而不是映射。例如,虽然保证使用值1、2、4、8。。。你最终会得到一个明确的答案——但在一张总地图上这样做是行不通的


我建议您使用一个枚举,如果需要的话,它对字符串有一个额外的值,您可以使用1L听起来您真的应该使用枚举而不是映射。例如,虽然保证使用值1、2、4、8。。。你最终会得到一个明确的答案——但在一张总地图上这样做是行不通的


我建议您使用一个枚举,如果需要的话,它会为字符串提供一个额外的值,您可以使用1L@hudi:我也编辑了我的答案-但我仍然认为您的方法不如使用枚举开始时那么优雅。我必须使用map,因为这个映射还有另一个有用的操作。@hudi:我也编辑了我的答案-但我仍然认为您的方法不如使用枚举开始时那么优雅。我必须使用map因为这张地图还有另外一个用途。
public static Set<String> valueToKeySet(long value) {
    Set<String> keys = new HashSet<String>();
    for (Map.Entry<String, Long> entry : hodnotyUdaju.entrySet()) {
        if ((value & entry.getValue()) != 0) {
            keys.add(entry.getKey());
        }
    }
    return keys;
}