Java 如何在类似映射的结构中复制值并以简单的方式获取所有键

Java 如何在类似映射的结构中复制值并以简单的方式获取所有键,java,collections,shared-libraries,key-value,Java,Collections,Shared Libraries,Key Value,我正在寻找一种方法来获取一个映射的键,该映射只包含一对值的列表(或重复的键,它是我的同义词)作为一个数组。我发现自己正在生成这种实现: public static Integer[] pairOfValues(){ class MyMap<T,E> extends ArrayList<AbstractMap.SimpleEntry<T,E>>{ public ArrayList<T> keys(){

我正在寻找一种方法来获取一个映射的键,该映射只包含一对值的列表(或重复的键,它是我的同义词)作为一个数组。我发现自己正在生成这种实现:

public static Integer[] pairOfValues(){
    class MyMap<T,E> extends ArrayList<AbstractMap.SimpleEntry<T,E>>{
        public ArrayList<T> keys(){
            try {
                ArrayList<T> keys=new ArrayList<>();
                this.forEach(entry -> { keys.add(entry.getKey()); });
                return keys;
            } catch (Exception e) {
                throw new RuntimeException("Impossible to obtain keys from the ArrayList",e);
            }
        }
    }
    
    MyMap<Integer,String> myMap=new MyMap<>(){{
        add(new AbstractMap.SimpleEntry(1,"a"));
        add(new AbstractMap.SimpleEntry(1,"x"));
        add(new AbstractMap.SimpleEntry(2,"b"));
        add(new AbstractMap.SimpleEntry(2,"a"));
    }};

    ArrayList<Integer> onlyKeys=myMap.keys();
    Integer[] requiredArray=onlyKeys.toArray(new Integer[onlyKeys.size()]);
    return requiredArray;
}
public静态整数[]pairOfValues(){
类MyMap Extendes ArrayList具有该方法,尽管在自定义实现的情况下,我不会将键作为一个集合获取,而是作为一个列表或其他允许重复数据的集合获取

总之:

  • 它应该能够有重复的值
  • 我应该能够在实例中调用方法并获取所有键值(包括重复的键值)
  • 它必须易于调用/使用
  • 我确信应该有一个已经完成的库(我不知道为什么Java中还没有),它将帮助我完成同样的任务,而无需在每次需要一对值时创建此类类

    我在网上查找,发现了这个库,在这里可以调用方法keys().iterator(),它只返回键,但作为迭代器而不是普通的集合,我需要一个for(我从一开始就一直在寻找避免)来复制值

    这里的任何人都知道一个库或一些可以帮助我们解决此类常见问题/解决方案的东西。

    您可以使用一些类来实现这一点,这些类将作为的扩展。我特别建议,如果您正在查找
    地图上的所有
    键,您可以拨打电话方法
    keys()
    ,这是一个数组,您可以使用正在使用的相同方法将其转换为数组

    您将从正在使用的示例中获得的代码将如下所示:

    public static Integer[] pairOfValues(){
        com.google.common.collect.Multimap<Integer,String> myMap=LinkedHashMultimap.create();
        myMap.put(1,"a");
        myMap.put(1,"x");
        myMap.put(2,"b");
        myMap.put(2,"a");
    
        Multiset<Integer> onlyKeys=myMap.keys();
        Integer[] requiredArray=onlyKeys.toArray(new Integer[onlyKeys.size()]);
        return requiredArray;
    }
    
    public静态整数[]pairOfValues(){
    com.google.common.collect.Multimap myMap=LinkedHashMultimap.create();
    myMap.put(1,“a”);
    myMap.put(1,“x”);
    myMap.put(2,“b”);
    myMap.put(2,“a”);
    Multiset onlyKeys=myMap.keys();
    整数[]requiredArray=onlyKeys.toArray(新整数[onlyKeys.size()]);
    返回所需数组;
    }
    
    您能详细说明一下您要做什么吗?首先,您没有使用或创建
    映射
    。您有一个
    数组列表
    ,可以将元组(键值对)放入其中您碰巧从
    AbstractMap.SimpleEntry
    借用了谁的实现。很难说您想做什么,但我认为您需要一个“多映射”数据结构,它允许每个键有多个值,比如
    map
    。请澄清您的最终目标。对不起(我认为代码足够清楚:P)我更新了描述,使它更清晰。结构1)应该能够有重复的值2)我应该能够在实例中调用方法并获取所有键值(包括重复的键值)3)我不需要迭代条目来手动提取键值(并遵循这一精神)。