如何使用从数据库检索的值创建 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();
}
}
}
希望对您有所帮助。
我有一个数据库列,其中包含从 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();
}
}
}
希望对您有所帮助。