Java MultipMap具有多个值的单键

Java MultipMap具有多个值的单键,java,arraylist,multidimensional-array,guava,maplist,Java,Arraylist,Multidimensional Array,Guava,Maplist,我正在研究java应用程序,这是一个非常基本的测试工具。我们需要做的是,我们必须在地图列表中用单个键存储多个值,例如“key,value,value”,即“1,www.google.com,test”,“2,www.gmail.com,test”等等。此外,一旦流程完成,我们需要修改各个键的值(test) 有没有办法做到这一点,我已经在谷歌上搜索,但找不到它正常工作“ 如果你能给我一个有价值的答案的示例代码,我将不胜感激 代码: 导入org.apache.commons.collections.

我正在研究java应用程序,这是一个非常基本的测试工具。我们需要做的是,我们必须在地图列表中用单个键存储多个值,例如“key,value,value”,即“1,www.google.com,test”,“2,www.gmail.com,test”等等。此外,一旦流程完成,我们需要修改各个键的值(test)

有没有办法做到这一点,我已经在谷歌上搜索,但找不到它正常工作“

如果你能给我一个有价值的答案的示例代码,我将不胜感激

代码: 导入org.apache.commons.collections.map.MultiKeyMap

公开课考试{

static MultiKeyMap masterLinkList = new MultiKeyMap();
static String fetchUrl, urlStatus, urlMessage;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    masterLinkList.put(1,"www.google.com", "Test");
    masterLinkList.put(2,"www.gmail.com", "Test");

    System.out.println(masterLinkList.get(1));

    masterLinkList.put(2,"www.gmail.com", "Test");

    if(masterLinkList.containsKey(1)&&masterLinkList.containsValue("Test")){
        masterLinkList.put(1,"www.gmail.com", "Passed");
    }
    System.out.println(masterLinkList.get(1));
}
}


谢谢,

Google Guava提供了几种运行良好的多地图实现,请查看文档:

详细说明:

例如:

Multimap<String,String> myMultimap = ArrayListMultimap.create();
// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");

// Getting the size
int size = myMultimap.size();
System.out.println(size);  // 4

// Getting values
Collection<string> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]

Collection<string> vegetables = myMultimap.get("Vegetables");
System.out.println(vegetables); // [Carrot]

// Iterating over entire Mutlimap
for(String value : myMultimap.values()) {
 System.out.println(value);
}

// Removing a single value
myMultimap.remove("Fruits","Pear");
System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]

// Remove all values for a key
myMultimap.removeAll("Fruits");
System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!) 
Multimap myMultimap=ArrayListMultimap.create();
//添加一些键/值
myMultimap.put(“水果”、“班纳纳”);
myMultimap.put(“水果”、“苹果”);
myMultimap.put(“水果”、“梨”);
myMultimap.put(“蔬菜”、“胡萝卜”);
//得到尺寸
int size=myMultimap.size();
系统输出打印项次(大小);//4.
//获取价值
收集水果=myMultimap.get(“水果”);
System.out.println(水果);//[班纳纳,苹果,梨]
收集蔬菜=myMultimap.get(“蔬菜”);
System.out.println(蔬菜);//[胡萝卜]
//在整个Mutlimap上迭代
for(字符串值:myMultimap.values()){
系统输出打印项次(值);
}
//删除单个值
myMultimap.移除(“水果”、“梨”);
System.out.println(myMultimap.get(“水果”);//[班纳纳,梨]
//删除键的所有值
myMultimap.removeAll(“水果”);
System.out.println(myMultimap.get(“水果”);//[](空集合!)

好吧,您描述的方式似乎可以通过使用映射结构来实现,其中您将一个键映射到一个值列表

Map<String, List<String>> multiValues = new HashMap<>;
List<String> values = new ArrayList<>;
values.add("www.google.com");
values.add("test");
multiValues.put("1", values);
Map multiValues=新HashMap;
列表值=新的ArrayList;
values.add(“www.google.com”);
添加(“测试”);
多值输入(“1”,值);

但是,如果您想更改该键的任何值,您必须自己执行一些操作。如果您想找到一个支持单个键的多个值的类,您可以使用如下内容。

对于
java.util.Map
键值必须是唯一的,我建议您实现自己的Map,如下所示:

class MyMap implements Map<Object, ArrayList<Object>> {
}
public putOneElement(Object key, Object value) {
this.get(key).put(value);
}

您可以使用java核心类:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiMap {
    public static void main(String[] args) {
        final Map<String, List<String>> map = new HashMap<String, List<String>>();

        final List<String> valSetOne = new ArrayList<String>();
        valSetOne.add("www.google.com");
        valSetOne.add("test");

        final List<String> valSetTwo = new ArrayList<String>();
        valSetTwo.add("www.gmail.com");
        valSetTwo.add("Test");

        map.put("1", valSetOne);
        map.put("2", valSetTwo);

        final List<String> values = map.get("1");
        System.out.println("Before changing: " + values.get(1));
        values.set(1, "newTest");
        System.out.println("After changing: " + values.get(1));
    }
}
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
公共类多重映射{
公共静态void main(字符串[]args){
final Map=new HashMap();
最终列表valSetOne=新的ArrayList();
valSetOne.add(“www.google.com”);
添加(“试验”);
最终列表valSetTwo=新的ArrayList();
valSetTwo.add(www.gmail.com);
添加(“测试”);
map.put(“1”,缬沙酮);
地图放置(“2”,valSetTwo);
最终列表值=map.get(“1”);
System.out.println(“更改前:+values.get(1));
设定值(1,“新测试”);
System.out.println(“更改后:+values.get(1));
}
}
下面写的是,您也可以使用Google Guava Collections或Apache Commons Collection。例如,查看链接:

logger.info(“记录有关目录的信息是否存在”);
processPropFile();
字符串[]URL=prop.getProperty(“URL”).split(“,”);
List=Arrays.asList(URL);
String[]folder=prop.getProperty(“目录”).split(“,”);
列表文件夹=数组.asList(文件夹);
对于(int i=0;i0){
info(“目录不是空的!”);
}否则{
info(“目录为空!”);
}
}否则{
logger.error(“无效目录!”);
//System.out.println(“这不是目录”);
}
}
返回null;

您能将您尝试过的代码粘贴到这里吗?MultiMap运行良好-您有什么问题吗?--但是您可以不费吹灰之力地实现
映射
或类似的映射。你为什么不试一下呢?据我所知,你必须构造一个有点像地图的结构,并且你的对象在那里持有前两个值
logger.info("Logging an INFO-about Directory exists or not.");
        processPropFile();
        String[] urls = prop.getProperty("URL").split(",");
        List<String> list = Arrays.asList(urls);
        String[] folder = prop.getProperty("DIRECTORY").split(",");
        List<String> folders = Arrays.asList(folder);
        for (int i = 0; i < folders.size(); i++) {
            String k = folders.get(i);
            File file = new File(k);
            if (file.isDirectory()) {
                logger.info("Connected to a Directory!"+folders.get(i));
                if (file.list().length > 0) {
                    logger.info("Directory is not empty!");
                } else {
                    logger.info("Directory is empty!");
                }
            } else {
                logger.error("Invalid Directory!");
                // System.out.println("This is not a directory");
            }
        }
        return null;