算法要求:把下面两个list:
columnNames list: ["Comment", "Comment", "Cost", "Term", "Cost"]
columnValues list: ["my comment 1", "my comment 2", "my cost 1", "my term", "my cost 2"]
变成:
columnNames list: ["Comment", "Cost", "Term"]
columnValues list: [["my comment 1", "my comment 2"], ["my cost 1", "my cost 2"], "my test"]
其中columnNames list中的元素Comment和Comment是重复的,要求新的List里面不能重复。
谢谢!
用hashtable,Names直接把字符串作为key,值无所谓。
Values,将字符串去掉数字作为Key,value是ArrayList,并且把自身添加进去。
看我下面代码, 狗服务到位不 .
List columnNames = Arrays.asList(new String[] {"Comment", "Comment", "Cost", "Term", "Cost"}) ;
List columnValues = Arrays.asList(new String[]{"my comment 1", "my comment 2", "my cost 1", "my term", "my cost 2"}) ;
Map<String, List<String>> map = new HashMap<String, List<String>>() ;
for (int x = 0; x < columnNames.size(); x++) {
List<String> valueList = map.get(columnNames.get(x));
if (valueList == null) {
valueList = new ArrayList<String>();
map.put(columnNames.get(x), valueList);
}
valueList.add(columnValues.get(x));
map.put(columnNames.get(x), valueList);
}
List<String> newColumnNames = new ArrayList<String>() ;
List<String> newColumnValues = new ArrayList<String>() ;
for(Entry<String, List<String>> list:map.entrySet()) {
newColumnNames.add(list.getKey()) ;
newColumnValues.add(Arrays.toString(list.getValue().toArray())) ;
}
System.out.println(JSON.toJSONStringWithDateFormat(map, "yyyy-MM-dd hh:mm:ss"));
System.out.println(JSON.toJSONStringWithDateFormat(newColumnNames, "yyyy-MM-dd hh:mm:ss"));
System.out.println(JSON.toJSONStringWithDateFormat(newColumnValues, "yyyy-MM-dd hh:mm:ss"));
这个应该是字符串归类吧,相同字符串舍去?可以描述一下要求是什么么?
我想要的结果是:
key: "Comment", value: ["my comment 1", "my comment 2"]
key: "Cost", value: ["my cost 1", "my cost 2"]
key: "Term", value: "my test"
但用算法怎样实现呢?楼上的说了等于没说啊
自己搞定:
List columnNames = new ArrayList();
columnNames.add("Comment");
columnNames.add("Comment");
columnNames.add("Cost");
columnNames.add("Test");
columnNames.add("Cost");
List columnValues = new ArrayList();
columnValues.add("my comment 1");
columnValues.add("my comment 2");
columnValues.add("my cost 1");
columnValues.add("my test");
columnValues.add("my cost 2");
Map map = new HashMap();
for (int i = 0; i < columnNames.size(); i++) {
boolean duplicatedColumn = false;
String columnName = columnNames.get(i);
if (map.keySet().contains(columnName)) {
continue;
}
List list = new ArrayList();
list.add(columnValues.get(i));
for (int j = columnNames.size() - 1; j > i; j--) {
if (columnNames.get(j).equals(columnNames.get(i))) {
list.add(columnValues.get(j));
map.put(columnName, list);
duplicatedColumn = true;
}
}
if (!duplicatedColumn) {
map.put(columnName, columnValues.get(i));
}
}
System.out.print(map);
楼上写的太啰嗦了, 还嵌套循环....
Map> map = new HashMap>() ; // 定义map
for (int x = 0; x < columnNames.size(); x++) {
List valueList = map.get(columnNames.get(x)) ;
if(valueList == null) {
valueList = new ArrayList () ;
}
valueList.add(columnValues.get(x)) ;
map.put(columnNames.get(x), valueList) ;
}
Map> map,定义这样的map 进行操作
定义如下map
Map<String,Set<String>> map
首先这2个数组的长度是一样的,那么可以使用google guava 中的 ArrayListMultimap 类实现你的需求。至于速度么,你可以测试下!
com.google.guava
guava
18.0
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import java.util.*;
public static void main(String[] args) {
List<String> keys = Lists.newArrayList("Comment", "Comment", "Cost", "Term", "Cost");
List<String> values = Lists.newArrayList("my comment 1", "my comment 2", "my cost 1", "my term", "my cost 2");
ArrayListMultimap<String, String> key4MultiValues = ArrayListMultimap.create();
if (keys.size() == values.size()) {
for (int i = 0; i < keys.size(); i++) {
key4MultiValues.put(keys.get(i), values.get(i));
}
}
Map<String, Collection<String>> asMap = key4MultiValues.asMap();
System.out.println(asMap);
}
输出
{Cost=[my cost 1, my cost 2], Comment=[my comment 1, my comment 2], Term=[my term]}
public static void main(String[] args) {
List keys = Arrays.asList("Comment", "Comment", "Cost", "Term", "Cost");
List values = Arrays.asList("my comment 1", "my comment 2", "my cost 1", "my term", "my cost 2");
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
for (int i =0;i<keys.size();i++) {
final String key = keys.get(i);
List<String> value = map.get(key);
if(value==null){
value = new ArrayList<String>();
map.put(key, value);
}
value.add(values.get(i));
}
System.out.println(map.toString());
}
1.ArrayList list= new ArrayList();
list.add("Comment");
list.add("Comment");
list.add("Cost");
list.add("Term");
list.add("Cost");
HashSet h = new HashSet(list);
System.out.println(h);
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
public class test {
public static void main(String[] args) {
ArrayList key = new ArrayList();
key.add("comment");
key.add("comment");
key.add("cost");
key.add("term");
key.add("cost");
ArrayList value = new ArrayList();
value.add("my comment 1");
value.add("my comment 2");
value.add("my cost 1");
value.add("my term");
value.add("my cost 2");
getList(key, value);
}
public static void getList(List<String> key, List<String> value) {
HashSet<String> key_ = new HashSet<String>(key);
key.clear();
key.addAll(key_);
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
// 创建key
for (int i = 0; i < key.size(); i++) {
List<String> keys = new ArrayList<String>();
map.put(key.get(i), keys);
}
// 插入相应的集合
for (int i = 0; i < value.size(); i++) {
for (int j = 0; j < key.size(); j++) {
if (value.get(i).contains(key.get(j))) {
map.get(key.get(j)).add(value.get(i));
}
}
}
System.out.println(map);
}
}
结果:{term=[my term], comment=[my comment 1, my comment 2], cost=[my cost 1, my cost 2]}
List columnNames = Arrays.asList(new String[] {"Comment", "Comment", "Cost", "Term", "Cost"}) ;
List columnValues = Arrays.asList(new String[]{"my comment 1", "my comment 2", "my cost 1", "my term", "my cost 2"}) ;
Map<String, List<String>> map = new HashMap<String, List<String>>() ;
for (int x = 0; x < columnNames.size(); x++) {
List<String> valueList = map.get(columnNames.get(x));
if (valueList == null) {
valueList = new ArrayList<String>();
map.put(columnNames.get(x), valueList);
}
valueList.add(columnValues.get(x));
map.put(columnNames.get(x), valueList);
}
List<String> newColumnNames = new ArrayList<String>() ;
List<String> newColumnValues = new ArrayList<String>() ;
for(Entry<String, List<String>> list:map.entrySet()) {
newColumnNames.add(list.getKey()) ;
newColumnValues.add(Arrays.toString(list.getValue().toArray())) ;
}
System.out.println(JSON.toJSONStringWithDateFormat(map, "yyyy-MM-dd hh:mm:ss"));
System.out.println(JSON.toJSONStringWithDateFormat(newColumnNames, "yyyy-MM-dd hh:mm:ss"));
System.out.println(JSON.toJSONStringWithDateFormat(newColumnValues, "yyyy-MM-dd hh:mm:ss"));