2017-08-18 54 views
-2

对于上下文:我需要用与用户输入相对应的值填充Hashmap。 1-20高度和A到T的长度。用户可以通过输入来指定这些。不使用太多填充散列表

然而,我的问题是,我如何绕过使用值重复填充Hashmap而不重复低于400次?

hashmap.put(K key, V value) 

HashMap的本身看起来像HashMap<String, Square> 广场是一个(空的现在)类。

+2

使用循环,也许? –

+0

@JBNizet没有。没有办法绕过它。他将不得不复制并粘贴400次。 – Michael

+0

看看Java 8 Stream API。如需更多帮助,请提供传入数据。 – sinedsem

回答

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); 
} 
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); 
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执行使用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")); 

(详细信息由编辑而异)