对于上下文:我需要用与用户输入相对应的值填充Hashmap。 1-20高度和A到T的长度。用户可以通过输入来指定这些。不使用太多填充散列表
然而,我的问题是,我如何绕过使用值重复填充Hashmap而不重复低于400次?
hashmap.put(K key, V value)
HashMap的本身看起来像HashMap<String, Square>
广场是一个(空的现在)类。
对于上下文:我需要用与用户输入相对应的值填充Hashmap。 1-20高度和A到T的长度。用户可以通过输入来指定这些。不使用太多填充散列表
然而,我的问题是,我如何绕过使用值重复填充Hashmap而不重复低于400次?
hashmap.put(K key, V value)
HashMap的本身看起来像HashMap<String, Square>
广场是一个(空的现在)类。
为什么不使用循环例如
for(int i=1; i<=400; i++){
//code to insert the key and value
//insert to the hashmap
hashmap.put(K key, V value);
}
好,如果你使用某种数据结构的有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);
您可以在拥有友好的初始化语法格式的编码数据,并将其转换成一个循环的地图。
例如:
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
执行使用Collectors.toMap(keyMapper, valueMapper, mergeFunction, mapSupplier)
- 但你不应该经常需要这个,因为它碰巧默认使用HashMap
,不保证它会保持这种状态)。
随着代码的增长,您可能会选择从文件中读取像这样的数据。
另外,只有400 map.put()
声明!您不必手动输入每一个。使用一个执行正则表达式搜索和替换的编辑器(vi,Emacs,Atom,TextMate,大多数IDE编辑器)。开始用这样的文件:
a,1,red
b,5,blue
c,6,purple
... etc.
正则表达式搜索模式:
([^,]*),([^,]*),([^,]*)
替换:
map.put("$1", new Square($2,"$3"));
(详细信息由编辑而异)
使用循环,也许? –
@JBNizet没有。没有办法绕过它。他将不得不复制并粘贴400次。 – Michael
看看Java 8 Stream API。如需更多帮助,请提供传入数据。 – sinedsem