当前位置:首页 > 服务端 > list集合有关操作

list集合有关操作

2022年11月08日 20:42:39服务端12

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),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68547.html

标签: List
分享给朋友: