当前位置: 首页 > 知识库问答 >
问题:

java比较2按对象id列出

居乐池
2023-03-14

正如标题所说,我有一个问题。我有两个数组。一个长度是五个。另一个长七个。

即使两个数组中的对象不同,如果数组中的所有对象具有相同的id,则将判断为具有相同的对象。

关于javascript有很多答案,但似乎关于java的答案并不多。任何遇到相同问题的人都可以分享解决方案。如果您对我的问题有任何类似的问题,请分享。非常感谢。

以下是我的尝试和样本数据。

"maxCastings"

[
        {
          "characterNo": "100121",
          "characterName": "막심 드 윈터",
          "manNo": "",
          "manName": "",
         
        },
        {
          "characterNo": "100122",
          "characterName": "댄버스 부인",
          "manNo": "3727",
          "manName": "옥주현",
          
        },
        {
          "characterNo": "100123",
          "characterName": "나",
          "manNo": "29655",
          "manName": "이지혜",
        
        },
        {
          "characterNo": "100124",
          "characterName": "잭 파벨",
          "manNo": "4202",
          "manName": "이창용",
         
        },
        {
          "characterNo": "100125",
          "characterName": "반 호퍼 부인",
          "manNo": "40282",
          "manName": "한유란",
         
        },
        {
          "characterNo": "100126",
          "characterName": "베아트리체",
          "manNo": "3543",
          "manName": "류수화",
         
        },
        {
          "characterNo": "100128",
          "characterName": "프랭크 크롤리",
          "manNo": "42618",
          "manName": "임정모",
         
        },
        {
          "characterNo": "100130",
          "characterName": "줄리앙 대령",
          "manNo": "31476",
          "manName": "김현웅",
         
        }
      ]

列表的5个对象是这个。

"castings"

[
  {
    "characterNo": "100121",
    "characterName": "막심 드 윈터",
    "manName": "에녹"
  },
  {
    "characterNo": "100122",
    "characterName": "댄버스 부인",
    "manName": "옥주현"
  },
  {
    "characterNo": "100123",
    "characterName": "나",
    "manName": "임혜영"
 },
  {
    "characterNo": "100124",
    "characterName": "잭 파벨",
    "manName": "최민철"
  },
  {
    "characterNo": "100125",
    "characterName": "반 호퍼 부인",
    "manName": "김지선"
  },
  {
    "characterNo": "100126",
    "characterName": "베아트리체",
    "manName": "김경호"
  }
]

如果manName不同但字符No相同,我想检查两个数组是否具有相同的元素。

我想要的是7个中的2个不是相同的元素。

这是我的代码

List<Casting> unMatchList = maxCastings.stream().filter(o1 -> castings.stream().noneMatch(o2 -> o2.getCharacterNo().equals(o1.getCharacterNo()))).collect(
                                        Collectors.toList());

这又回来了

错误:(737,95) java:从lambda表达式引用的局部变量必须是final或有效的final

共有1个答案

国盛
2023-03-14

这是一个工作代码示例,我用它来重新创建您的问题,它可以工作。。。

    class Data {
        Integer characterNo;
        String characterName;
        String manName;

        public Data(Integer characterNo, String characterName, String manName) {
            this.characterNo = characterNo;
            this.characterName = characterName;
            this.manName = manName;
        }

        public Integer getCharacterNo() {
            return characterNo;
        }

        public void setCharacterNo(Integer characterNo) {
            this.characterNo = characterNo;
        }

        public String getCharacterName() {
            return characterName;
        }

        public void setCharacterName(String characterName) {
            this.characterName = characterName;
        }

        public String getManName() {
            return manName;
        }

        public void setManName(String manName) {
            this.manName = manName;
        }

        @Override
        public String toString() {
            return "Data{" +
                    "characterNo=" + characterNo +
                    ", characterName='" + characterName + '\'' +
                    ", manName='" + manName + '\'' +
                    '}';
        }
    }

    @Test
    void getNonMatchingList() {
        var a1 = List.of(
                new Data(1,"x","a"),
                new Data(2,"x","b")
        );

        var a2 = List.of(
                new Data(1,"x","a")
        );

        var unMatchList = a1.stream().filter(o1 -> a2.stream().noneMatch(o2 -> o2.getCharacterNo().equals(o1.getCharacterNo()))).collect(
                Collectors.toList());

        unMatchList.forEach( it -> System.out.println(it));
    }

因此,您的代码似乎工作正常……唯一的问题是,5Array变量可能不是final或有效final。你可以试着宣布它是最终的,它可能会起作用。如果没有,请发布下一个错误,我们可以进行调试

 类似资料:
  • 问题内容: 是否有任何方法可以接收2个JSON对象并将其进行比较以查看是否有任何数据已更改? 编辑 在审查评论之后,需要进行一些澄清。 JSON对象定义为 “一组无序的名称/值对。一个对象以{(左括号)开始,以}(右括号)结束。每个名称后面都带有:(冒号),名称/值对之间以,(逗号)分隔。 ”。- json.org 我的目标是能够简单地比较2个JSON对象文字。 我不是javascript专家,所

  • 我正在尝试创建一个二进制搜索程序,该程序可以使用各种类型的变量(int、float、string等)来查看数组中是否存在元素。我正试图找出如何比较变量。下面是我正在使用的内容的草图: 我甚至不确定使用对象是否是最好的方法。

  • 我想断言,相同类型的两个对象列表在该对象的属性值方面是相同的。例如,我有两个Person对象列表,它们具有名字、姓氏和中间名属性。每个Person对象都有这些属性(java bean)的方法setter和getter,构造函数不包含任何参数。 让我们假设这里已经有一个名为existingPersonList的两个人的列表,该列表具有以下属性: 现有人员1:firstName=鲍勃,lastName

  • 问题内容: 假设你有一些具有多个字段的对象,可以通过以下方式进行比较: 因此,在此示例中,当你询问是否: 你可能会问a的姓氏是否早于b的姓氏,或者a是否早于b,等等。 在这些对象之间进行多重比较而不增加不必要的混乱或开销的最干净的方法是什么? 界面仅允许一个字段进行比较 在我看来,添加许多比较方法(即,等)比较混乱。 那么最好的方法是什么? 问题答案: 你可以实现比较两个对象的,并且可以根据需要检

  • 问题内容: 我有两个列表 , 都包含 MyData 类型的对象,而 MyData* 包含这些变量。 利斯塔和数组listB都包含MyData的对象,现在我要两个列表的对象值比较这里 的名字 ,以及 检查 变量一样,如果 利斯塔 包含这些对象值 和ListB也包含 然后我必须比较列表并返回false,因为两个列表相同但是如果ListA包含 和 ListB 包含 然后我必须比较列表并返回true,因为