【问题标题】:Accessing elements of a Dictionary in Java where values are lists访问 Java 中字典的元素,其中值是列表
【发布时间】:2014-05-25 07:05:15
【问题描述】:

在 python 中,我们可以构造一个像 students = {name1:[marks1,marks2], name2:[marks1,marks2]} 这样的字典

为了填补我们可以做的标记

students[name1][0]=50, students[name1][1]=100 获取students={name1:[50,100]}

如何在 Java 中做同样的事情?我对java很陌生

【问题讨论】:

标签: java list dictionary


【解决方案1】:

您可以使用Maplike 来实现。

 Map<String, List<Integer>> students=...

这里,String 是学生姓名,List&lt;Integer&gt; 是分数。现在,把价值应用以下逻辑

 List<Integer> marks= students.get(name1);
 if(marks==null){
   marks = new ArrayList<>();
 }
 students.put(name1, marks.add(mark));

【讨论】:

  • 基本上我收到的标记是student1 mark1, student1 mark1, student1 mark2, student2 mark2。我没有收到student1 mark1 mark2student1 mark1 mark2 的标记
【解决方案2】:

您可以使用Guava 中的Multimap 来实现此目的:

Multimap <String, Integer> students = ArrayListMultimap<String, Integer>.create();
students.put(name1, mark1);
students.put(name1, mark2);
students.put(name2, mark3);
students.put(name2, mark4);
Collection <Integer> marks1 = students.get (name1);
Collection <Integer> marks2 = students.get (name2);

你可以用这个Collection做任何你想做的事情,例如:

double avg = 0;
for (Integer mark : marks1)
    avg += mark;
avg /= marks1.size();

如果您不喜欢使用Collection 做事,您可以使用不太通用的代码来获取List&lt;Integer&gt;

ListMultimap <String, Integer> students = ArrayListMultimap<String, Integer>.create();
//...
List <Integer> marks1 = students.get(name1);
//...

【讨论】:

  • Collection markers1 = students.get (name1) 会返回两个分数对吗?
  • @VeilEclipse 是的,它将返回 Collection,由两个 Integers 组成:mark1mark2
  • 来自Collection,您能否告诉我如何获得在不同操作中使用它们的各个标记
  • @VeilEclipse Collection&lt;Integer&gt;是一个可迭代的通用接口,SetList和其他集合接口扩展和HashSetArrayList实现。您可以在 for each 循环中迭代任何集合,例如for (Integer mark: marks) {。因为在这种情况下将其构造为ListMultimap,所以它是一个包含给定学生所有分数的列表,因此您可以将其转换为List,并在需要时按索引访问元素。 Multimap 几乎是 Map&lt;K, List&lt;T&gt;&gt; 的包装器。
  • 我试过 Multimap &lt;String, Integer&gt; students = new ListMultimap&lt;&gt;(); 但 Eclipse 要求我将其转换为 (Multimap&lt;String, Integer&gt;) new ListMultimap&lt;&gt;(); 但它仍然会抛出错误 cannot instantiate the type ListMultiMap 你能在这里指导我吗
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多