【发布时间】:2015-08-03 12:14:51
【问题描述】:
首先,我有一个包含多个 Object 类型数组的列表,例如:
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());
我的问题是,如何让这更简单!
【问题讨论】:
-
“如何让这个更简单!” codereview.stackexchange.com?
-
对于初学者来说,将这些东西转储到异构对象数组而不是适当的类中,无论如何都会让你的代码变得一团糟。
-
@LouisWasserman 同意了 - 但遗憾的是,这是 Hibernate 让我使用的。
标签: java arrays java-8 java-stream