gpt4 book ai didi

java - java中二维数组的比较

转载 作者:行者123 更新时间:2023-12-01 19:34:54 24 4
gpt4 key购买 nike

String[][] Array1= {{"A","welcome","S"},
{"B","welcome","S"},
{"C","foodmart","L"},
{"D","welcome","S"},
{"E","publix","M"},};


String[][] Array2= {{"A","welcome","S"},
{"L","welcome","S"},
{"F","foodmart","L"},
{"D","welcome","S"},
{"B","welcome","S"},};

我想将两个数组与第一个值进行比较,即 Array1[0][0] 与 Array2[0][0] ,然后在新数组中添加该值(如果该值在两个数组中),否则不要添加它在新数组中。

比较后新数组的预期输出。

String[][] Array3 ={{"A","welcome","S"},
{"D","welcome","S"},
{"B","welcome","S"},};

最佳答案

数组并不只是因为数组中的元素相同而==。所以需要编写特殊的比较逻辑,而不是使用集合方法retainAll。

对集合使用 LinkedHashSet 实例可以删除重复项并使集合保持与原始数组相同的顺序。

有两种方法可以实现此目的。如果您使用的是 java 11+,我更喜欢第二种方式。

使用 java 1.8 之前的 java。

    Set<String[]> set1 = new LinkedHashSet<>(Arrays.asList(Array1));
Set<String[]> set2 = new LinkedHashSet<>(Arrays.asList(Array2));
Set<String[]> set3 = new LinkedHashSet<String[]>();

Iterator<String[]> it1 = set1.iterator();
while (it1.hasNext()) {
String[] element1 = it1.next();
Iterator<String[]> it2 = set2.iterator();
while (it2.hasNext()) {
String[] element2 = it2.next();
if (element1[0].equals(element2[0])
&& element1[1].equals(element2[1])
&& element1[2].equals(element2[2])) {
set3.add(element1);
}
}
}
set3.toArray(new String[][]{});

如果您使用的是 java 11+,那么您可以使用流和 var 关键字来使内容更具可读性。

    var set1 = new LinkedHashSet<>(Arrays.asList(Array1));
var set2 = new LinkedHashSet<>(Arrays.asList(Array2));
var set3 = new LinkedHashSet<String[]>();

set1.forEach(element1 ->
set2.stream()
.filter(element2 ->
element1[0].equals(element2[0])
&& element1[1].equals(element2[1])
&& element1[2].equals(element2[2]))
.findFirst()
.ifPresent(element2 -> set3.add(element1)));

set3.toArray(new String[][]{});

关于java - java中二维数组的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58194798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com