如何从列表/数组中检索不匹配的结果

我想比较两个数组的对象并获得一个不匹配的对象的新数组。这是: Array1 Array2 都包含 Object User 方法 getId 和 getUsername


    for (int fw = 0; fw < tempOldArray.size(); fw++) {

        for (int fi = 0; fi < tempArray.size(); fi++) {

            if (tempOldArray.get(fw).getId() == tempArray.get(fi).getId()) {

                match++;

                break;

            }

            if(fi == (tempArray.size()-1)) {

                nomatchfound++;

                break;

            }

        }

    }


    Array1: {[1231, Peter], [2562, Jackson], [38987, Robert], [4765, William]}

    Array2: {[2562, Jackson], [7584, Alfred], [38987, Robert], [8123, Mozart]}


    Array3 should output {[1231, Peter], [4765, William]} 

and Array4 should output {[7584, Alfred], [8123, Mozart]}

还询问了如何从列表中检索结果


{"peter", "trump", "donald", "jerry"}

{"peter", "donald", "lucas", "jerry"}

并输出不匹配的


ITMISS
浏览 108回答 5
5回答

弑天下

我想比较两个数组的对象并获得一个不匹配的对象的新数组。这是: Array1 Array2 都包含 Object User 方法 getId 和 getUsername&nbsp; &nbsp; for (int fw = 0; fw < tempOldArray.size(); fw++) {&nbsp; &nbsp; &nbsp; &nbsp; for (int fi = 0; fi < tempArray.size(); fi++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (tempOldArray.get(fw).getId() == tempArray.get(fi).getId()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; match++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(fi == (tempArray.size()-1)) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nomatchfound++;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; Array1: {[1231, Peter], [2562, Jackson], [38987, Robert], [4765, William]}&nbsp; &nbsp; Array2: {[2562, Jackson], [7584, Alfred], [38987, Robert], [8123, Mozart]}&nbsp; &nbsp; Array3 should output {[1231, Peter], [4765, William]}&nbsp;and Array4 should output {[7584, Alfred], [8123, Mozart]}还询问了如何从列表中检索结果{"peter", "trump", "donald", "jerry"}{"peter", "donald", "lucas", "jerry"}并输出不匹配的

UYOU

如果您已经在使用列表,只需使用以下内容list1.removeAll(list2)为了进一步优化,如果您使用哈希集,您的删除操作将变为 O(1),因此效率更高

人到中年有点甜

这只是离散数学的问题。检查执行情况removeAll():public static void main(String[] args) {&nbsp; &nbsp; List<String> first = Arrays.asList("peter", "trump", "donald", "jerry");&nbsp; &nbsp; List<String> second = Arrays.asList("peter", "donald", "lucas", "jerry");&nbsp; &nbsp; List<String> results = new ArrayList<>(first);&nbsp; &nbsp; results.removeAll(second);&nbsp; &nbsp; System.out.println(results.toString());}印刷:[王牌]这满足了您对完整保留first和second列表并创建第三个列表以包含结果的要求。

繁星淼淼

假设您正在使用的类称为 Person,您必须将以下 equals 方法添加到类定义中@Overridepublic boolean equals(Object obj) {&nbsp; &nbsp; if (obj == null) {&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp; if (!Person.class.isAssignableFrom(obj.getClass())) {&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp; final Person other = (Person) obj;&nbsp; &nbsp; if (this.id != other.id) {&nbsp; &nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; &nbsp; return true;}在这种情况下,您可以简单地使用像这样的其他答案中指定的 removeAll 方法。list1.removeAll(list2);

qq_笑_17

显示的其他答案List::removeAll(例如来自 Cuga 的答案)是正确的,最适合简单的情况。Java流我将展示使用 Java 流的更高级的方法。如果您的情况变得更加复杂,您可能想要使用这种方法。定义您的两个列表。用于List.of实例化不可修改的列表已添加到 Java 9。List&nbsp;<&nbsp;String&nbsp;>&nbsp;namesA&nbsp;=&nbsp;List.of&nbsp;(&nbsp;"Peter"&nbsp;,&nbsp;"Paul"&nbsp;,&nbsp;"Mary"&nbsp;,&nbsp;"Wendy"&nbsp;,&nbsp;"Lisa"&nbsp;); List&nbsp;<&nbsp;String&nbsp;>&nbsp;namesB&nbsp;=&nbsp;List.of&nbsp;(&nbsp;"Peter"&nbsp;,&nbsp;"Paul"&nbsp;,&nbsp;"Jesse"&nbsp;,&nbsp;"Wendy"&nbsp;,&nbsp;"Lisa"&nbsp;);从一个列表创建流。对于流中的每个元素,查看是否可以在另一个列表中找到该元素。要查找所有匹配项,请使用.filter ( namesB :: contains )。要查找所有不匹配的项目(不同的元素),请使用:.filter ( Predicate.not ( namesB :: contains ) )这个Predicate.not技巧是 Java 11 的新技巧,如这里所示。将结果收集到一个新的List.List&nbsp;<&nbsp;String&nbsp;>&nbsp;distinct&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;namesA.stream&nbsp;() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter&nbsp;(&nbsp;Predicate.not&nbsp;(&nbsp;namesB&nbsp;::&nbsp;contains&nbsp;)&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect&nbsp;(&nbsp;Collectors.toList&nbsp;()&nbsp;);转储到控制台。System.out.println&nbsp;(&nbsp;"namesA:&nbsp;"&nbsp;+&nbsp;namesA&nbsp;); System.out.println&nbsp;(&nbsp;"namesB:&nbsp;"&nbsp;+&nbsp;namesB&nbsp;); System.out.println&nbsp;(&nbsp;"distinct:&nbsp;"&nbsp;+&nbsp;distinct&nbsp;);结果。namesA: [Peter, Paul, Mary, Wendy, Lisa]namesB: [Peter, Paul, Jesse, Wendy, Lisa]独特的:[玛丽]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java