亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 <String, List<Integer>> 在哈希圖中存儲值

如何使用 <String, List<Integer>> 在哈希圖中存儲值

慕勒3428872 2021-12-22 20:31:10
我有以下數組我正在嘗試將數組信息保存在哈希圖中。String[][] students = {{"Bobby", 87}, {"Charles", 100}, {"Eric", 64},                                {"Charles", 22}};Map<String, List<Integer>> map = new HashMap<>();List<Integer> score1 = new ArrayList<>();for(int i=0; i<students.length; i++) {    score1.add(students[i][1]);    map.put(students[i][0], score1);}但我想將信息存儲在地圖鍵值對中。預期輸出:"Bobby" -> 87"Charles" -> 100,22"Eric" -> 64實際輸出:{Charles=[87, 100, 64, 22], Eric=[87, 100, 64, 22], Bobby=[87, 100, 64, 22]}我怎樣才能做到這一點?
查看完整描述

3 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

使用 java-8,您可以在一行中使用以下所有內容:

Map<String, List<Integer>> collect1 = 
     Arrays.stream(students).collect(Collectors.groupingBy(arr -> arr[0], 
              Collectors.mapping(arr -> Integer.parseInt(arr[1]), Collectors.toList())));

在這里,我們按學生姓名的第 0 個索引分組,第 1 個索引將保存學生的分數。


查看完整回答
反對 回復 2021-12-22
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

您需要區分已經存在的和新的數組:


 List<Integer> currScore = map.get(students[i][0])

 if (currScore != null) {

   currScore.add(students[i][1]);

 } else {

    List<Integer> newScore = new ArrayList<>();

    newScore.add(students[i][1]);

    map.put(students[i][0], newScore);

 }

還將變量名稱更改為有意義的名稱


查看完整回答
反對 回復 2021-12-22
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

String[][] students = { { "Bobby", "87" }, { "Charles", "100" }, { "Eric", "64" }, { "Charles", "22" } };

Map<String, List<Integer>> map = new HashMap<>();

Stream.of(students).forEach(student -> map.computeIfAbsent(student[0], s -> new ArrayList<>()).add(Integer.parseInt(student[1])));



查看完整回答
反對 回復 2021-12-22
  • 3 回答
  • 0 關注
  • 219 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號