Java:如何判断嵌套列表与普通列表是否完全互斥?代码问题排查
问题描述
我需要判断一个普通列表和嵌套列表中的子列表是否“完全互斥”——只有当两个列表的所有元素都完全相同时才判定为不互斥(输出false),而不是只要有一个元素相同就输出false。
当前使用Collections.disjoint()的代码输出结果:false true false
我期望的输出结果:true true false
当前代码如下:
ArrayList<String> properties = new ArrayList<>(Arrays.asList("A", "B")); ArrayList<ArrayList<String>> pairs = new ArrayList<ArrayList<String>>(); pairs.add(new ArrayList<>(Arrays.asList("A", "C"))); pairs.add(new ArrayList<>(Arrays.asList("D", "C"))); pairs.add(new ArrayList<>(Arrays.asList("A", "B"))); for(int i = 0; i< pairs.size(); i++) { System.out.println(Collections.disjoint(properties, pairs.get(i))); }
解决方案
Collections.disjoint()的逻辑是只要存在任意一个共同元素就返回false,这和你的需求完全不符。你需要的是:仅当两个列表完全相等时返回false,其余情况返回true。
直接修改循环内的判断逻辑,利用List.equals()方法严格比较两个列表的元素(数量、顺序、值完全一致才返回true),再对结果取反即可:
ArrayList<String> properties = new ArrayList<>(Arrays.asList("A", "B")); ArrayList<ArrayList<String>> pairs = new ArrayList<ArrayList<String>>(); pairs.add(new ArrayList<>(Arrays.asList("A", "C"))); pairs.add(new ArrayList<>(Arrays.asList("D", "C"))); pairs.add(new ArrayList<>(Arrays.asList("A", "B"))); for(int i = 0; i< pairs.size(); i++) { // 仅当两个列表完全相同时输出false,其余情况输出true System.out.println(!properties.equals(pairs.get(i))); }
运行这段代码后,输出结果就是你期望的:true true false
内容的提问来源于stack exchange,提问作者Michal
相关产品推荐
相关产品推荐

