按你题目的要求是实现了,不过灵活性很差,不知道你怎么会有这样的业务.....
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
private static String[] KEYS = { "b", "c", "d" };
public static void main(String args[]) {
List<Map<String, String>> data = new ArrayList<Map<String, String>>();
initData(data);
System.out.println("==========处理前==========");
show(data);
List<Map<String, String>> result = deal(data);
System.out.println("==========处理后==========");
show(result);
}
private static List<Map<String, String>> deal(List<Map<String, String>> data) {
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
while (data.size() > 0) {
Map<String, String> map = data.get(0);
String value = map.get("id");
for (int i = 1; i < data.size(); i++) {
Map<String, String> other = data.get(i);
String otherValue = other.get("id");
if (!value.equals(otherValue)) {
continue;
}
for (String key : KEYS) {
map.put(key, map.get(key) + "+" + other.get(key));
}
data.remove(other);
i--;
}
result.add(map);
data.remove(map);
}
return result;
}
private static void initData(List<Map<String, String>> data) {
Map<String, String> map = new HashMap<String, String>();
map.put("id", "1");
map.put("b", "b1");
map.put("c", "c1");
map.put("d", "d1");
data.add(map);
map = new HashMap<String, String>();
map.put("id", "2");
map.put("b", "b2");
map.put("c", "c2");
map.put("d", "d2");
data.add(map);
map = new HashMap<String, String>();
map.put("id", "1");
map.put("b", "b3");
map.put("c", "c3");
map.put("d", "d3");
data.add(map);
map = new HashMap<String, String>();
map.put("id", "4");
map.put("b", "b4");
map.put("c", "c4");
map.put("d", "d4");
data.add(map);
}
private static void show(List data) {
for (Object obj : data) {
System.out.println(obj);
}
}
}==========处理前==========
{id=1, d=d1, b=b1, c=c1}
{id=2, d=d2, b=b2, c=c2}
{id=1, d=d3, b=b3, c=c3}
{id=4, d=d4, b=b4, c=c4}
==========处理后==========
{id=1, d=d1+d3, b=b1+b3, c=c1+c3}
{id=2, d=d2, b=b2, c=c2}
{id=4, d=d4, b=b4, c=c4}