Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何比较数组列表与现代Java的相等性?

如何比较数组列表与现代Java的相等性?

提问于 2018-03-18 23:03:15
回答 2关注 0查看 292

我有两个数组列表。

如何轻松比较这些与Java 8及其功能的平等性,而无需使用外部库?我正在寻找比这样的暴力代码更好的(更高级别,更短,更高效)解决方案(未经测试的代码,可能包含错别字等,而不是问题的要点):

代码语言:javascript
运行
AI代码解释
复制
boolean compare(List<String[]> list1, List<String[]> list2) 
{
    // tests for nulls etc omitted
    if(list1.size() != list2.size()) {
       return false;
    }
    for(i=0; i<list1.size(); ++i) {
        if(!Arrays.equals(list1.get(i), list2.get(i))) {
            return false;
        }
    }
    return true;
}

或者,如果没有更好的方法,那也是一个有效的答案。

如果Java 9提供了更好的方式,Java 8可以提供什么样的功能,请随时提一提。

回答 2

六个六

回答已采纳

发布于 2018-03-19 07:40:48

1)基于Java 8流的解决方案:

代码语言:javascript
运行
AI代码解释
复制
List<List<String>> first = list1.stream().map(Arrays::asList).collect(toList());
List<List<String>> second = list2.stream().map(Arrays::asList).collect(toList());
return first.equals(second);

2)更简单的解决方案(适用于Java 5+):

代码语言:javascript
运行
AI代码解释
复制
return Arrays.deepEquals(list1.toArray(), list2.toArray());

3)关于你的新需求(首先检查包含的字符串数组长度),你可以编写一个通用的帮助器方法,对转换后的列表进行等式检查:

代码语言:javascript
运行
AI代码解释
复制
<T, U> boolean equal(List<T> list1, List<T> list2, Function<T, U> mapper) {
    List<U> first = list1.stream().map(mapper).collect(toList());
    List<U> second = list2.stream().map(mapper).collect(toList());
    return first.equals(second);
}

那么解决方案可能是:

代码语言:javascript
运行
AI代码解释
复制
return equal(list1, list2, s -> s.length)
    && equal(list1, list2, Arrays::asList);

全球资讯翻译官

发布于 2018-03-19 08:34:22

for环至少可以streamified,导致:

代码语言:javascript
运行
AI代码解释
复制
return (list1.size()==list2.size() &&
        IntStream.range(0, list1.size())
                 .allMatch(i -> Arrays.equals(list1.get(i), list2.get(i)));
和开发者交流更多问题细节吧,去 写回答
相关文章
Java 两个数组比较内容是否相等
有两个数组,前提是数组对象是一样的。需要比较这两个数组中对象的值是否一致?需要考虑对象的顺序。如果对象里面在嵌套一个数组怎么处理。
赵哥窟
2022/07/08
2.1K0
java中String的相等比较
首先贴出测试用例: 1 package test; 2 3 import org.junit.Test; 4 5 /** 6 * Created by Administrator o
Ryan-Miao
2018/03/13
1.4K0
java中String的相等比较
2019-2-24-元组的相等性比较
元组作为轻量级的数据结构,在c#中具有广泛的引用。但是元组的比较一直以来都是对于成员的依次比较。好在C#7.3开始,引入了元素的相等性比较,让元组的易用性有了大幅提升。
黄腾霄
2020/06/10
7320
Java的Integer和Integer比较相等
引用数据类型对比需要用equals()方法对比相等 因Integer存在缓存, 在Integer的值不超过-128~127之间==对比为true, 若超过则会new一个Integer对象==结果为false;
Java架构师必看
2021/11/29
1.6K0
如何比较2个数组相等以及如何检出不匹配项
当我空闲的时候,我会密切地观察读者群里的一举一动,不放过他们的任何一个问题,帮助他们成长虽然不是我应尽的义务,但我的确喜欢和他们交流的感觉,毕竟能帮一个是一个。也许我的一个小小的举动,就能够他们跨越成长过程中的一大步——请给我一次骄傲的机会嘛。
沉默王二
2020/03/11
9870
BigDecimal精度与相等比较的坑
题意 题目链接 给出$n$个点,求出一个点使得到各个点的距离之和最小,距离为欧几里得距离 Sol 模拟退火真是玄学,我退了一上午,最后把exp函数去了就A了。 后来改了改,发现是大小符号的问题。。 但
欠扁的小篮子
2018/10/09
1.1K0
BigDecimal精度与相等比较的坑
js原始值与对象的相等比较
let a = []; let b = “0”; // 1 console.log(a0); // true // 2 console.log(a!a);// true // 3 console.log(ab); // false // 4 console.log(b0); // true
马克社区
2022/07/01
2.3K0
数组a[i]与i[a]相等之术
为什么数组值a[1]与数组值1[a]是相等的?为什么会出现这种的奇怪现象?
Qt君
2019/07/15
7430
Java规则:原子类的相等性判断
Java的规则S2204规定,对于Java并发库定义的诸如AtomicInteger、AtomicLong等原子类,不能使用equals()方法测试其值是否相等。
张逸
2023/03/23
1.2K0
Java规则:原子类的相等性判断
java比较字符串是否相等「建议收藏」
java用equals方法比较的是字符串的内容是否相同,先判断地址是否相等,相等返回true;比较类型是否一样,不一样,返回false。
Java架构师必看
2022/01/18
1.5K0
java比较字符串是否相等「建议收藏」
C#相等性 - “==”
在刚学C#的时候,我以为C#里的==和.NET里的object.Equals()方法是一样的,就是一个语法糖而已。其实它们的底层机制是不一样的,只不过它们给出的结果在大多数情况下恰好相同。
solenovex
2019/05/25
7400
如何将python列表拆分为大小相等的块
程序熵
2023/09/25
4010
如何将python列表拆分为大小相等的块
java中数组转列表_Java数组转list
1.1 该方法返回的是数组的一个视图,对这个list的操作都会反映在原数组上,而且这个list长度是跟原数组一样是固定的,转换后的列表不支持add、remove等改变长度的方法
全栈程序员站长
2022/09/23
1.9K0
java中数组转列表_Java数组转list
Django比较相等或者不相等的模板语法ifequal / ifnotequal
ifequal / ifnotequal      在模板语言里比较两个值并且在他们一致的时候显示一些内容,Django提供了 ifequal 和 ifnotequal 标签。      ifequal 标签比较两个值,如果相等,则显示{% ifequal %}和{% endifequal %}之间的所有内容      ifnotequal 标签 与 ifequal 对应,当两个值不相等时显示。      与 if 标签一样,ifequal 和 ifnotequal标签也支持 else 标签,但不支持eli
用户1214487
2018/01/24
1.5K0
JavaScript比较两个数组是否相等(多选题答案判断)
如果使用了组件库,比如 element-ui 的 checkout 组件,选择顺序不同,得到的数组顺序就会不同。
德顺
2023/08/25
2670
JavaScript比较两个数组是否相等(多选题答案判断)
如果使用了组件库,比如 element-ui 的 checkout 组件,选择顺序不同,得到的数组顺序就会不同。
德顺
2021/05/14
1.6K0
JavaScript 中的相等性判断
简而言之,在比较两件事情时,双等号将执行类型转换; 三等号将进行相同的比较,而不进行类型转换 (如果类型不同, 只是总会返回 false ); 而Object.is的行为方式与三等号相同,但是对于NaN和-0和+0进行特殊处理,所以最后两个不相同,而Object.is(NaN,NaN)将为 true。(通常使用双等号或三等号将NaN与NaN进行比较,结果为false,因为IEEE 754如是说.) 请注意,所有这些之间的区别都与其处理原语有关; 这三个运算符的原语中,没有一个会比较两个变量是否结构上概念类似。对于任意两个不同的非原始对象,即便他们有相同的结构, 以上三个运算符都会计算得到 false 。
用户7293182
2022/01/17
1K0
JavaScript 中的相等性判断
go float 相等比较 原
因为浮点数不是一种精确的表达方式,所以像整型那样直接用==来判断两个浮点数是否相等是不可行的,这可能会导致不稳定的结果。
solate
2019/07/19
3.9K0
js中的相等与不相等
在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而 true 转换为1; 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值; 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类 型值按照前面的规则进行比较; null 和undefined 是相等的。 要比较相等性之前,不能将null 和undefined 转换成其他任何值。 如果有一
寻找石头鱼
2020/01/14
1.8K0
C++ 数组array与vector的比较
 1:array 定义的时候必须定义数组的元素个数;而vector 不需要;且只能包含整型字面值常量,枚举常量或者用常量表达式初始化的整型const对象,非const变量以及需要到运行阶段才知道其值的const变量都不能用来定义数组的维度. 2:array 定义后的空间是固定的了,不能改变;而vector 要灵活得多,可再加或减. 3:vector有一系列的函数操作,非常方便使用.和vector不同,数组不提供 push——back或者其他的操作在数组中添加新元素,数组一经定义就不允许添加新元素;若需要则要
拾点阳光
2018/05/10
2.6K0

相似问题

如何比较两个集合是否相等?

2320

如何比较JavaScript中的数组?

2465

如何比较Java中的字符串?

2193

腾讯云与阿里云的比较?

1627K

什是java的平台无关性?

1349
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
腾讯云TDP | KOL擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档