为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 <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 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信