为了账号安全,请及时绑定邮箱和手机立即绑定

在java中合并数组

在java中合并数组

波斯汪 2023-03-09 10:20:33
我需要按对象的 id 合并数组。我的班级有两个数组(本地和全局):public class Info {    private int id;// never change    private String msg;    private boolean isFavor;// presents only in local array// constructor,getters, setters etc }合并规则:如果对象不存在于全局数组中,我们不合并它;仅从全局对象中获取 msg ;如果对象存在于全局数组中,我们添加(合并)它;变量“isFavor”取自本地对象;数组没有排序;例子:local arayList = {Info(1,"msg1",false),Info(2,"msgTwo",false),Info(3,"msg3",true), Info(4,"msg4",true)};global arayList = {Info(1,"msg1",false),Info(2,"msg2",false),Info(3,"msg3",false),Info(5,"msg5",false)}result arayList = {Info(1,"msg1",false),Info(2,"msg2",false),Info(3,"msg3",true),Info(5,"msg5",false)}
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

所以,我做了这样的事情,我认为它可以满足你的要求。基本上,我所做的是以下内容。我将所有全局值添加到映射中,并在局部值的下一次迭代中检查 id 是否存在,然后更改isFavor.


public static void main(String[] args) throws ParseException {

    List<Info> local = new ArrayList<>();

    local.add(new Info(1,"msg1",false));

    local.add(new Info(2,"msgTwo",false));

    local.add(new Info(3,"msg3",true));

    local.add(new Info(4,"msg4",true));



    List<Info> global = new ArrayList<>();

    global.add(new Info(1,"msg1",false));

    global.add(new Info(2,"msg2",false));

    global.add(new Info(3,"msg3",false));

    global.add(new Info(4,"msg5",true));


    Map<Integer, Info> map = new HashMap<>();


    for (Info info : global) {

        if (!map.containsKey(info.id)) {

            map.put(info.id, info);

        }

    }


    for (Info info : local) {

        if (map.containsKey(info.id)){

            map.get(info.id).isFavor = info.isFavor;

        }

    }


    System.out.println(map.values());

}


查看完整回答
反对 回复 2023-03-09
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

public Info [] merge(Info [] localArray, Info [] globalArray) {


    List<Info> resultList = new ArrayList();

    for(Info infoGlobal : globalArray) {

        Info infoLocal = findInfo(infoGlobal.getId(), localArray);

        if( infoLocal != null )

            infoGlobal.setFavor(infoLocal.isFavor());

        resultList.add(infoGlobal);

    }


    return resultList.toArray();

}


private Info findInfo(int id, Info [] infoArray) {


    for(Info info : infoArray)

        if(info.getId == id)

            return info ;


   return null ;

}


查看完整回答
反对 回复 2023-03-09
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信