我正在开发java应用程序,这是一个非常基本的测试工具。我们需要做的是,我们必须在映射列表中用单个键存储多个值,例如"key,value,value",即"1,www.google.com,test"、"2,www.gmail.com,test"等。此外,一旦过程完成,我们需要修改各个键的值(test)。
有什么办法可以做到这一点吗?我在谷歌上搜索了一下,但找不到它正常工作https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html'
如果你能给我示例代码和你宝贵的答案,我将不胜感激。
代码:
导入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实现,只需查看文档即可:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html
详细说明:https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained#Multimap
示例:
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!)
您可以使用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));
}
}
下面是如何写的,你也可以使用Google Guava Collection或Apache Commons Collection。例如,look链接:http://java.dzone.com/articles/hashmap-%E2%80%93-单键和
好吧,您描述的方式似乎可以通过使用Map结构来完成,在Map结构中,您有一个映射到值列表的键。
Map<String, List<String>> multiValues = new HashMap<>;
List<String> values = new ArrayList<>;
values.add("www.google.com");
values.add("test");
multiValues.put("1", values);
但是,如果您想更改该键的任何值,则必须自己进行一些操作。如果你想为一个键找到一个支持多个值的类,你可以使用Google Guava的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;
对于java.util.Map
,键值必须是唯一的,我建议您实现自己的映射,类似于以下内容:
class MyMap implements Map<Object, ArrayList<Object>> {
}
然后添加一种方法来放置这样一个元素:
public putOneElement(Object key, Object value) {
this.get(key).put(value);
}