list集合有关操作
1.说明:此文是操作list的有关方法,会陆续补充。
(也有一些相关工具可以操作,列:hutool,Commons)
2: 集合运算
2.1 获取俩个集合的交集
List<T> intersect = list1.stream() .filter(list2::contains) .collect(Collectors.toList());
2.2 获取集合的并集
//使用并行流 List<String> listAll = list1.parallelStream().collect(toList()); List<String> listAll2 = list2.parallelStream().collect(toList()); listAll.addAll(listAll2);
2.3 差集
//对象类,allUser:全部用户 commentUser:部分用户 notCommentUser:其他用户
public List<UserInfo> getNotComment(List<UserInfo> allUser,List<UserInfo> commentUser){
List<UserInfo> notCommentUser = allUser.stream()
.filter(notComment -> !commentUser.stream().map(all -> all.getUserId()).collect(Collectors.toList()).contains(notComment.getUserId()))
.collect(Collectors.toList());
return notCommentUser;
}
//普通集合
List<Integer>getList=new ArrayList<>();
getList.add(1);
getList.add(2);
getList.add(3);
List<Integer>list=new ArrayList<>();
list.add(1);
list.add(3);
list.add(4);
list.add(5);
getList.removeAll(list)
System.out.println("差集:"+getList); //结果 [2]
或者
list.removeAll(getList)
System.out.println("差集:"+list) //结果 [ 4,5]
3 集合转换
3.1 list对象集合转换成listmap集合
##第一种:流转换 List<Map<String, Object>> mapList = metricMetricKeyList.stream().map((m) -> { Map<String, Object> map = new HashMap<>(); map.put("id", m.getId()); map.put("metricMetricKey", m.getMetricMetricKey()); map.put("metricKeyDesc", m.getMetricKeyDesc()); return map; }).collect(Collectors.toList()) ##或者 List<Map<String,Object>> personToMap = peopleList.stream().collect(ArrayList::new, (list, p) -> { Map<String, Object> map = new HashMap<>(); map.put("id", m.getId()); map.put("metricMetricKey", m.getMetricMetricKey()); map.put("metricKeyDesc", m.getMetricKeyDesc()); list.add(map); }, List::addAll); ##第二种:反射机制转换list集合 public static List<Map<String, Object>> objectArrToMapArr(Object object, String[] strArr) throws Exception { List<String> strList = Arrays.asList(strArr); if (object == null) { return null; } List<Object> objectList = (List<Object>) object; List<Map<String, Object>> list = new ArrayList<>(); for (Object obj : objectList) { Map<String, Object> map = new HashMap<String, Object>(); List<Field> fieldList = new ArrayList<>(); Class objClass = obj.getClass(); while (objClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类). fieldList.addAll(Arrays.asList(objClass.getDeclaredFields())); objClass = objClass.getSuperclass(); //得到父类,然后赋给自己 } for (Field field : fieldList) { String varName = field.getName(); boolean accessFlag = field.isAccessible(); field.setAccessible(true);// 允许通过反射访问该字段 Object valueObj = field.get(obj); if (strList.contains(varName)) { map.put(varName, valueObj); } field.setAccessible(accessFlag); } list.add(map); } return list; }
3.2 list 转换map
/*使用Collectors.toMap形式*/ Map result = peopleList.stream().collect(Collectors.toMap(p -> p.name, p -> p.age, (k1, k2) -> k1)); //其中Collectors.toMap方法的第三个参数为键值重复处理策略,如果不传入第三个参数,当有相同的键时,会抛出一个IlleageStateException。 //或者 Map<Integer, String> result1 = list.stream().collect(Collectors.toMap(Hosting::getId, Hosting::getName)); //List<People> -> Map<String,Object> List<People> peopleList = new ArrayList<>(); peopleList.add(new People("test1", "111")); peopleList.add(new People("test2", "222")); Map result = peopleList.stream().collect(HashMap::new,(map,p)->map.put(p.name,p.age),Map::putAll); //反射 public static Map<String, Object> objectToMap(Object obj, String[] strArr) throws Exception { List<String> strList = Arrays.asList(strArr); if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(); List<Field> fieldList = new ArrayList<>(); Class objClass = obj.getClass(); while (objClass != null) {//当父类为null的时候说明到达了最上层的父类(Object类). fieldList.addAll(Arrays.asList(objClass.getDeclaredFields())); objClass = objClass.getSuperclass(); //得到父类,然后赋给自己 } for (Field field : fieldList) { String varName = field.getName(); boolean accessFlag = field.isAccessible(); field.setAccessible(true);// 允许通过反射访问该字段 Object valueObj = field.get(obj); if (strList.contains(varName)) { map.put(varName, valueObj); } field.setAccessible(accessFlag); } return map; }
3.3 map 转换成list
List<Person> list = map.entrySet().stream().sorted(Comparator.comparing(e -> e.getKey()))
.map(e -> new Person(e.getKey(), e.getValue())).collect(Collectors.toList());
List<Person> list = map.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue)).map(e -> new Person(e.getKey(), e.getValue())).collect(Collectors.toList());
List<Person> list = map.entrySet().stream().sorted(Map.Entry.comparingByKey()).map(e -> new Person(e.getKey(), e.getValue())).collect(Collectors.toList());
3.4 map转换另一个map
public static class User{
private List<String> versions;
}
Map<String, User> collect = map.entrySet().stream()
.collect(Collectors.toMap(
item -> item.getKey(),
item -> new User(item.getValue())));
//示例2 Map<String,Integer> 转 Map<String,Double>
Map<String, Integer> pointsByName = new HashMap<>();
Map<String, Integer> maxPointsByName = new HashMap<>();
Map<String, Double> gradesByName = pointsByName.entrySet().stream()
.map(entry -> new AbstractMap.SimpleImmutableEntry<>(
entry.getKey(), ((double) entry.getValue() /
maxPointsByName.get(entry.getKey())) * 100d))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
4 排序,某字段添加数据
//插入指标描述
assetMetricConfigList.forEach(a->a.setMetricKeyDesc(sysMetricMapperc.selectByPrimaryKey(a.getDimensionName()+"."+a.getMetricMetricKey()).getMetricDesc()));
//排序 指标维度-子对象-指标 assetMetricConfigList.sort(Comparator.comparing(AssetMetricConfig::getDimensionName).thenComparing(AssetMetricConfig::getChildObj).thenComparing(AssetMetricConfig::getMetricMetricKey));
//根据指标维度过滤子对象集合
Set<String> childObjList= list.stream().filter(assetMetricConfig->Objects.equals(assetMetricConfig.getDimensionName(),dimensionName)).map(AssetMetricConfig::getChildObj).collect(Collectors.toSet());
或者 多个
List<AssetMetricConfig> metricMetricKeyList= list.stream().filter(assetMetricConfig -> Objects.equals(assetMetricConfig.getDimensionName(), dimensionName)).collect(Collectors.toList()).stream().filter(assetMetricConfig -> Objects.equals(assetMetricConfig.getChildObj(), childObj)).collect(Collectors.toList());
作者:小小的码农们
来源链接:https://blog.csdn.net/yq337744/article/details/126034038
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。