2017-08-18 85 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")); 

(詳細信息由編輯而異)