【发布时间】:2021-08-05 09:36:34
【问题描述】:
我正在尝试开发一种有效的方法来在几个 BigInteger 值之间执行逻辑与运算。例如,让我们考虑下面的 sn-p:
public static void main(String[] args) {
List<BigInteger> a = Arrays.asList(new BigInteger("1000",2), new BigInteger("101",2), new BigInteger("111",2));
List<BigInteger> b = Arrays.asList(new BigInteger("10",2), new BigInteger("10110",2), new BigInteger("10011",2));
List<BigInteger> c = Arrays.asList(new BigInteger("1",2), new BigInteger("10110",2), new BigInteger("11110",2));
List<BigInteger> dd = IntStream.range(0, a.size())
.mapToObj(i -> a.get(i).and(b.get(i)).and(c.get(i)))
.collect(Collectors.toList());
System.out.println(dd);
//OUTPUT = [0, 4, 2]
}
但是,这个解决方案的问题是 map 函数接受的值的静态数量。让我们假设一个 ArrayList 包含多个列表(也超过 3 个),我该如何更改以前的解决方案?
public static void main(String[] args) {
List<BigInteger> a = Arrays.asList(new BigInteger("1000",2), new BigInteger("101",2), new BigInteger("111",2));
List<BigInteger> b = Arrays.asList(new BigInteger("10",2), new BigInteger("10110",2), new BigInteger("10011",2));
List<BigInteger> c = Arrays.asList(new BigInteger("1",2), new BigInteger("10110",2), new BigInteger("11110",2));
ArrayList<List<BigInteger>> collection = new ArrayList<List<BigInteger>>();
collection.add(a);
collection.add(b);
collection.add(c);
List<BigInteger> dd = null;
//......
System.out.println(dd);
}
请注意,我决定选择采用 stream.map(),因为列表中 BigInteger 值的数量可能很大(数千个值),我想利用 parallelStream() 来执行此操作。但是,我接受任何有效地执行此操作的建议。
【问题讨论】:
-
看起来你可能会从 BitSet 而不是 BigInteger 中受益。
标签: java parallel-processing java-stream