對於上下文:我需要用與用戶輸入相對應的值填充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