gpt4 book ai didi

java - 过滤 List 以保持一致的值

转载 作者:行者123 更新时间:2023-11-30 08:48:41 26 4
gpt4 key购买 nike

首先,我有一个包含多个对象类型数组的列表,例如:

    Object[] arr1 = new Object[] {"FIM4R1500030", BigInteger.valueOf(5272456l), "A10328E00074531842"};
Object[] arr2 = new Object[] {"FIM4R1500031", BigInteger.valueOf(886445384123l), "A10328E00074531842"};
final List<Object[]> arrs = Arrays.asList(arr1, arr2);

然后,我写了一个过滤逻辑,保留一致的值,不一致的填null。结果看起来像这样:

List[
Object[][null,null,"A10328E00074531842"],
Object[][null,null,"A10328E00074531842"]
]

现在,我的问题是这个逻辑变得相当复杂且难以阅读,我不确定我是否可以接受它。另外,我真的不想开始编写一个成熟的实用程序类,因为这个功能似乎很小。这是我的代码:

    final Predicate<Integer> isConsistant = index -> {

for (Object[] arr : arrs) {
if (!arr[index].equals(arrs.get(0)[index])) {
return false;
}
}
return true;
};

List<Object[]> filtered = arrs.stream().map(arr -> {

Object[] returnList = new Object[arrs.get(0).length];

for (int i = 0; i < arrs.get(0).length; i++) {
if (isConsistant.test(i)) {
returnList[i] = arrs.get(0)[i];
} else {
returnList[i] = null;
}
}

return returnList;
})
.collect(toList());

我的问题是,如何让这更简单!

最佳答案

为什么要 List<Object[]>作为你的过滤器的结果?如果我能很好地理解你的问题,所有 Object[]该列表内部看起来是一样的。所以代码可以是:

Object[] filtered = IntStream.range(0, arrs.get(0).length)
.mapToObj(i -> arrs.stream().allMatch(arr -> arr[i] != null && arr[i].equals(arrs.get(0)[i])) ? arrs.get(0)[i] : null)
.toArray();

关于java - 过滤 List<Object[]> 以保持一致的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31787014/

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