需要帮助在Java中映射此数据

Ste*_*ris 4 java map

我在映射这些数据时遇到问题

          1           35
          1           30
          1           20
          2           10
          3           40
          3           25
          3           15
Run Code Online (Sandbox Code Playgroud)

我尝试使用HashMap,但它只会映射到此数据的最后一次出现.

and*_*soj 8

的行为MapHashMap你所描述的是预期的行为,因为其他评论者注意.你想要的是一个多图.您可以自己滚动(不要这样做 - 其他评论者建议将地图映射到列表,但这很快变得很麻烦.如果您真的想要自己动手,请使用列表/设置值滚动您自己的通用多图并隐藏复杂性. )或使用Guavamultimap.例:

import com.google.common.collect.HashMultimap;
import com.google.common.collect.SetMultimap;

  public static void main(String[] args) 
  {
    final SetMultimap<Integer, Integer> foo = HashMultimap.create();
    foo.put( 1,35);
    foo.put(   1,30);
    foo.put(  1,20);
    foo.put(  2,10);
    foo.put(  3,40);
    foo.put(  3,25);
    foo.put(  3,15);
    System.out.println(foo);
  }
Run Code Online (Sandbox Code Playgroud)

输出:

{1 = [35,20,30],2 = [10],3 = [25,40,15]}

如果要访问这些值,有几种方法取决于您要执行的操作.只是调用get(Integer key)将返回值的集合.

另外,看看这个答案,其中引用了番石榴的许多相关优点.


SLa*_*aks 6

文件说明:

public interface Map
将键映射到值的对象.地图不能包含重复的键; 每个键最多可以映射一个值.

相反,您可以将数字列表与每个键相关联.