匣里虫吟 2016-10-27 17:41 采纳率: 77.8%
浏览 10243
已采纳

将List中重复值合并,并返回一个list

一个List中有多个表的对象 表对象有5个字段,所有对象的count字段都为1,现在想把name相等的对象合并,并且count会变成合并了几个就变为几。。。就是List中有10个表对象,其中3个对象的name相等,就把他们合并为8个,并且那个3合一的对象count是3

  • 写回答

11条回答 默认 最新

  • 极光舞者 2016-10-28 01:29
    关注

    1.重写equals方法,name相同即为相等
    2.新建一个List,用来放结果。
    3.遍历旧的List,如果新的list中存在名字相同的,则新的List中该元素的count+1. 如果不存在,则放入新的List

    示例代码:

    //测试类
    public class ListTest {
    public static void main(String[] args) {

        List<ListTestObject> oldList = new ArrayList<>();
        //模拟数据
        oldList.add(new ListTestObject("jack", 1));
        oldList.add(new ListTestObject("jerry", 1));
        oldList.add(new ListTestObject("jone", 1));
        oldList.add(new ListTestObject("jerry", 1));
        oldList.add(new ListTestObject("jone", 1));
    
        List<ListTestObject> newList = new ArrayList<>();
        for (ListTestObject testObjOld : oldList) {
            // 遍历新的List,看是否存在,存在则count加一,不存在则放入新的List
            boolean flag = false;
            for (ListTestObject testObjNew : newList) {
                if (testObjNew.equals(testObjOld)) {
                    // 新的List中存在名字相同的,则count+1
                    testObjNew.setCount(testObjNew.getCount() + 1);
                    flag = true;
                }
            }
    
            // 新的List中不存在
            if (!flag) {
                newList.add(testObjOld);
            }
        }
    
        System.out.println(newList);
    
    
    }
    

    }

    //实体类
    public class ListTestObject {
    private String name;
    private int count;
    //因为示例只用了name,count,另外3个属性先不写。

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCount() {
        return count;
    }
    public void setCount(int count) {
        this.count = count;
    }
    
    public ListTestObject(String name, int count) {
        super();
        this.name = name;
        this.count = count;
    }
    
    @Override
    public boolean equals(Object obj) {
    
        ListTestObject testObj;
        try {
            testObj = (ListTestObject) obj;
        } catch (Exception e) {
            //类不同,直接返回false
            return false;
        }
        if(testObj.getName().equals(this.getName())){
            return true;
        }
        return false;
    }
    
    @Override
    public String toString() {
        return "ListTestObject [name=" + name + ", count=" + count + "]";
    }
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?