如何使用从数据库检索的值创建 HashMap?

How to create HashMap, using value retrieved from Database?

我有一个数据库列,其中包含从 0 到 10 的值 基于从数据库中检索到的值,我需要创建一个 HashMap

例子:如果我得到从0到6的值,我需要在HashMap中存储'sad' 如果我从 7 到 8 获得价值,我需要在 HashMap 中存储 'ok' 如果我得到 9 到 10 的值,我需要将 'happy' 存储在 HashMap

我知道一种方法

if (value.equals("1") || value.equals("2") || value.equals("3")..... || value.equals("6"){
map.put (value,"sad")
}
else if (value.equals("7") || value.equals("8")){
map.put(value, "ok")
} else{
map.put(value, "happy")
}

我不确定这样做是否正确?因为如果从 0 到 50 之间有更多的值,那将很麻烦。有没有更好的方法呢?

使用其他哈希映射存储预期值,并根据您的数据库值涉及值并放入您的哈希映射中。 在下面的示例中,数据库值将是您预期的哈希图 hm 的关键。 例如:

HashMap<Integer,String> hm=new HashMap<Integer,String>();  
hm.put(1,"Sad"); 
hm.put(2,"Sad"); 
hm.put(3,"Sad");
hm.put(7,"Ok");
hm.put(10,"Happy");
String expval = hm.get(3);
map.put(Value, expval)

您可以使用 Java enum。定义一个 enum,其中包含链接到关联号码的所有消息映射。然后在此枚举中创建一个 API 以反向查找包含特定数字的枚举常量,并使用该 API 来解析要放入地图中的内容。

下面是这个方法的工作演示,你可以运行看看它是如何工作的:

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class EnumSelector {

    public static void main(String[] args) {
        Map<Integer, String> store = new HashMap<>();

        store.computeIfAbsent(1, EmotionalState::findLabel);
        store.computeIfAbsent(4, EmotionalState::findLabel);
        store.computeIfAbsent(8, EmotionalState::findLabel);
        store.computeIfAbsent(10, EmotionalState::findLabel);
        store.computeIfAbsent(35, EmotionalState::findLabel);
        store.computeIfAbsent(0, EmotionalState::findLabel);
        store.computeIfAbsent(40, EmotionalState::findLabel);
        store.computeIfAbsent(25, EmotionalState::findLabel);
        store.computeIfAbsent(33, EmotionalState::findLabel);
        store.computeIfAbsent(55, EmotionalState::findLabel);
        store.computeIfAbsent(-1, EmotionalState::findLabel);
        store.computeIfAbsent(100, EmotionalState::findLabel);

        System.out.println(store);
    }

    public static enum EmotionalState {
        NULL("Null"), // No levels
        SINGLE("Single", 0), // Single level of 0
        COMBO_ENUM("Combo", 20, 30, 40, 50, 60), // From 20-30 + 40, 50, 60
        ENUMERATED("Enumerated", 33, 33, 28, 55), // From 33-33 + 28, 55

        SAD("Sad", 1, 6), 
        OK("Ok", 7, 8), 
        HAPPY("Happy", 9, 15),
        DEFAULT_STATE("Default");

        private String name;
        private List<Integer> levels;

        EmotionalState(String name, int... levels) {
            this.name = name;

            // The first two values will be considered as range
            IntStream initialStream = (levels.length < 2) ? 
                    Arrays.stream(levels) : // Single value
                    IntStream.range(levels[0], levels[1] + 1); // Range of values

            this.levels = initialStream
                    .mapToObj(Integer::new)
                    .collect(Collectors.toList());

            // Add remaining values as literals
            if (levels.length > 2)
                Arrays.stream(Arrays.copyOfRange(levels, 2, levels.length))
                    .mapToObj(Integer::new)
                    .forEach(this.levels::add);
        }

        public String getName() {
            return name;
        }

        public boolean containsLevel(int level) {
            return levels.stream()
                    .filter(l -> l.intValue() == level)
                    .findAny()
                    .isPresent();
        }

        public static EmotionalState findFor(int level) {
            return Stream.of(EmotionalState.values())
                    .filter(en -> en.containsLevel(level))
                    .findAny()
                    .orElse(DEFAULT_STATE);
        }

        public static String findLabel(String level) {
            return findLabel(Integer.parseInt(level));
        }

        public static String findLabel(int level) {
            return EmotionalState.findFor(level).getName();
        }
    }
}

Complete code on GitHub

希望对您有所帮助。