对于上下文:我需要使用与用户提供的输入相对应的值填充Hashmap。 高度为1-20,长度为A到T.用户可以通过输入来指定这些。
我的问题是,如何在不重复400次以下的情况下使用值填充Hashmap?
hashmap.put(K key, V value)
Hashmap本身看起来像HashMap<String, Square>
Square是一个(现在为空)类。
答案 0 :(得分:1)
为什么不使用循环,例如
for(int i=1; i<=400; i++){
//code to insert the key and value
//insert to the hashmap
hashmap.put(K key, V value);
}
答案 1 :(得分:0)
如果你有400个元素,那么你肯定会使用某种数据结构(列表,数组,等等),现在,使用java8你可以流式传输它们,然后将它们收集到地图中......
List<Integer> myListOfKeys = Arrays.asList(1, 2, 3, 4, 5, 6); //or your list with 400 keys
List<Long> myListOfValues = Arrays.asList(221L, 222L, 223L, 224L, 225L, 226L);//same
Map<Integer, Long> myHashMap = IntStream.range(0, myListOfKeys.size()).boxed()
.collect(Collectors.toMap(k -> myListOfKeys.get(k), v -> myListOfValues.get(v)));
System.out.println(myHashMap);
答案 2 :(得分:0)
您可以使用更友好的初始化语法对数据进行编码,并将其转换为循环中的地图。
例如:
Object[][] rows = new Object[][] {
{ "A", 1, "red" },
{ "B", 5, "blue" },
// ... etc.
};
Map<String,Square> map = new HashMap<>();
for(Object[] row : rows) {
map.put(
(String) row[0],
new Square((Integer) row[1], (String) row[2])
);
}
你也可以使用流做同样的事情:
Map <String,Square> map = Arrays.stream(rows)
.collect(Collectors.toMap(
row -> (String) row[0],
row -> new Square((Integer) row[1], (String) row[2])
));
(你在问题中指定了一个HashMap
。我不知道这是否是一个漏洞,或者对你来说是否是一个重要的要求。为了保证一个特定的Map
实现使用{ {1}} - 但是你不应该经常需要这个。当它发生时,默认使用Collectors.toMap(keyMapper, valueMapper, mergeFunction, mapSupplier)
,但不能保证它会保持这种状态。)
随着代码的增长,您可能会选择从文件中读取这样的数据。
或者,只需要400 HashMap
个语句!您不必手动键入每个。使用执行正则表达式搜索和替换的编辑器(vi,Emacs,Atom,TextMate,大多数IDE编辑器)。从这样的文件开始:
map.put()
正则表达式搜索模式:
a,1,red
b,5,blue
c,6,purple
... etc.
替换为:
([^,]*),([^,]*),([^,]*)
(详情因编辑而异)