之前的数据样例:
[
{
"name": "张三",
"公司": "腾讯"
},
{
"name": "李四",
"公司": "阿里"
},
{
"name": "王五",
"公司": "百度"
},
{
"name": "张三",
"地址": "四川"
},
{
"name": "李四",
"地址": "湖南"
},
{
"name": "王五",
"地址": "广东"
}
]
我需要的数据:
[
{
"name": "张三",
"公司": "腾讯",
"地址": "四川"
},
{
"name": "李四",
"公司": "阿里",
"地址": "湖南"
},
{
"name": "王五",
"公司": "百度",
"地址": "广东"
}
]
受楼上两位老哥启发,代码如下
public class Test2 {
public static void main(String[] args) {
Map<String, String> map1 = new MyMap<>();
map1.put("name", "张三");
map1.put("公司", "腾讯");
Map<String, String> map2 = new MyMap<>();
map2.put("name", "李四");
map2.put("公司", "阿里");
Map<String, String> map3 = new MyMap<>();
map3.put("name", "王五");
map3.put("公司", "百度");
Map<String, String> map4 = new MyMap<>();
map4.put("name", "哈哈哈");
map4.put("公司", "嘿嘿嘿");
Map<String, String> map5 = new MyMap<>();
map5.put("name", "张三");
map5.put("地址", "四川");
Map<String, String> map6 = new MyMap<>();
map6.put("name", "李四");
map6.put("地址", "湖南");
Map<String, String> map7 = new MyMap<>();
map7.put("name", "王五");
map7.put("地址", "广东");
List<Map<String, String>> list = new ArrayList<>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
list.add(map5);
list.add(map6);
list.add(map7);
//lambda遍历输出
list.forEach(map -> System.out.println(map.toString()));
System.out.println("==========================");
Map<String, String> m1;
Map<String, String> m2;
/* 遍历方式:
* 将集合中当前元素m1与它后一个元素m2比较,若name相同,则将m2中的内容put到m1中,同时删除m2
* 指针j向右偏移一位,重复上一步,直至所有元素都作为m1过一次
* */
for (int i = 0; i < list.size() - 1; i++) {
for (int j = i; j < list.size() - 1; j++) {
m1 = list.get(i);
m2 = list.get(j + 1);
//若m1与m2的name相同
if (m1.equals(m2)) {
//则将m2中的内容put到m1中
m2.forEach(m1::put);//lambda遍历
//删除m2
list.remove(j + 1);
}
}
}
System.out.println("==========================");
//lambda遍历输出
list.forEach(map -> System.out.println(map.toString()));
}
@SuppressWarnings("unchecked")
static class MyMap<K, V> extends LinkedHashMap<K, V> {
/**
* 重写equals方法,this为m1,o为m2
* 这里其实需要instanceof来检查泛型的,但是我不会使用instanceof来检查泛型,
* 不能直接使用if ( o instanceof LinkedHashMap<String, String>),这样是
* 编译失败的,所以我没办法只能用try弄一下
*
* @param o m2
* @return 若m1与m2的name相同,返回true
*/
@Override
public final boolean equals(Object o) {
if (o == this)
return true;
try {
LinkedHashMap<String, String> map = (LinkedHashMap<String, String>) o;
if (this.get("name").equals(map.get("name"))) {
return true;
}
} catch (ClassCastException e) {
e.printStackTrace();
}
return false;
}
}
}
我怕代码挤在一起,截图给你:
运行结果:
List<Map<String,Object>> mapList = new ArrayList<>();
Map<Object,Map<String,Object>> resultMap = new HashMap();
for (Map<String, Object> map : mapList) {
Object name = map.get("name");
if (resultMap.get(name)==null) {
resultMap.put(name,map);
}
resultMap.get(name).putAll(map);
}
resultMap 是个map里面套map的,之所以不用list套map是为了循环里面get操作复杂度为O(1)。你最后想要list格式的话,
List ls = new ArrayList(resultMap.values() 或者 entrySet()); 调用一下这个就好了呗。这没什么影响。
写代码思维很重要,你要看的懂,别人要看得懂,要简洁,要性能。或许还有别的方法实现,可以钻研一下。
java的List集合里面放了Map,List<Map<String,Object>>,如何判定人名相同...
public class Test2 {public static void main(String[] args) {Map<String, String> map1 = new MyMap<>();map1.put("name", "张三");map1.put("公司", "腾讯");Map<String, String> map2 = new MyMap<>();map2.put("name", "李四");map2.put("公司", "阿里");Map<Strin...
Java中List Set Map 是否有序等总结,两个对象equals算重复
List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删...
java用map把list中首字母相同的单词放在一起
可以放在一起的放在一起的方法有;1. 先创建一个list集合来存放map对象,然后在创建几个map对象来设置值2.对map对象进行值的设置,然后把它添加到list中3.创建一个resultMap的对象用来存最终结果4.因为map的可以是set集合所以不会重复,就可以这样设置把所以出现在list中map的key值都设置到resultMap对象...
3种方法,用Java找出两个List中的重复元素
.collect(Collectors.toList());```方法三:借助HashMap 还可以通过HashMap来识别重复元素。我们将每个元素作为键,其出现次数作为值存入HashMap。遍历HashMap时,找到出现次数大于1的元素,这些元素就是重复的。以下是一个使用HashMap来找出两个List中重复元素的代码示例。```java Map map = new Hash...
List<map<string,string>>类型的集合,分离出重复的map值和不重复的?
思路很简单:利用set集合不重复特性,找出重复的value,然后做个标记,进行分类即可!import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;public class Day22A { final static List<Map<String, String>> lis...
java中list里面存放map,根据map中的某两个个字段进行排序
用Collections.sort(List list, Comparator c)实现一个Comparator即可 public class MyComparator implements Comparator { public int compare(Object o1, Object o2) { Map m1=(Map)o1, m2=(Map)o2;\/\/从m1与m2取字段值然后比较,大于返回1,等于返回0,小于返回-1 } public boolean equals(Object ...
java中list里面存放map,根据map中的某两个个字段进行排序
list是存放单独的元素的,而map集合存放的是键值和对应的映射关系 你是不能单纯的把map存入list中的,你是想把map的键存入list吗?还是存放值,异或着是存放他的映射关系?
一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把...
java.util.*;public class Main { public static void main(String[] args) { List<Map<String, Object>> list = new ArrayList<>(4); \/* * map1:{ID:4,身高:170,体重:60} map2:{ID:4,年龄:20,性别:男} map3:{ID:5,身高:160,体重:50} map4:{ID...
java里有没有专门判断List里有重复的数据
你好,既然用list了,那么就不排除会重复,而且list可以是对象,也并不好确认唯一性,可以用map来进行存储确认唯一性。如果一定要把list判断出来的话,可以参考下面的小例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public static void main(String[] ...
如何将两个List<Map<String,Object>>合并为一个
很简单,换个思路,先把两个list转成json数组合并,再转成list.json和list互转网上好多工具类