Java 获取数组错误的键&;水流条件
我想从数组中获取密钥,并将它们放入Java 获取数组错误的键&;水流条件,java,collections,compiler-errors,java-8,java-stream,Java,Collections,Compiler Errors,Java 8,Java Stream,我想从数组中获取密钥,并将它们放入列表中 V[] values; private List<K> getVals (){ return IntStream.range(arr.length/2,arr.length).filter(i-> arr[i]!=null && i%2==0 ).collect(Collectors.<K>toList());} 我知道,因为它是一个IntStream我在列表中得到int,对吗?我的类型是K,但即使不使
列表中
V[] values;
private List<K> getVals (){
return IntStream.range(arr.length/2,arr.length).filter(i-> arr[i]!=null && i%2==0 ).collect(Collectors.<K>toList());}
我知道,因为它是一个IntStream
我在列表中得到int,对吗?我的类型是K,但即使不使用泛型,也不会有任何变化
第二个问题:
我想知道如何迭代该数组
并在指定索引上设置数据。
但条件是,如果该索引上已经有一个值,我将重新计算该键。
假设我想写一些类似的东西:
if (arr[i]==0) {
// do something and return
} else {
// do something else and return
}
我不明白这里怎么了。我使用的代码与某些Internet页面上的代码相同。您在lambda中使用的类型是K
,但数组的类型是V
。我不知道这些类型的化学需氧量是从哪里来的,但显然它们不兼容。要编译这篇文章,你的第一个问题应该是V扩展K
List<K> getVals() {
return IntStream.range(arr.length/2, arr.length)
.filter(i -> arr[i] != null && i%2 == 0)
.collect(Collectors.<K>toList());
}
如果这样做有效,则在收集器.toList()调用中可能不需要类型witness
对于第二个问题,您可以使用数组有条件地设置数组的元素。setAll
:
int[] arr = ... ;
Arrays.setAll(arr, i -> arr[i] == 0 ? compute() : arr[i]);
这基本上是对数组索引运行IntStream
的简写。事实上,这就是它的实现方式
或者,在数组索引上写出IntStream
,过滤掉不想分配的索引,然后在forEach
中进行分配:
IntStream.range(0, arr.length)
.filter(i -> arr[i] == 0)
.forEach(i -> arr[i] = compute());
你说的钥匙是什么意思?数组中没有键,列表中也没有键。我不知道您在尝试什么,但例如,i%==0
甚至不存在。我没有复制粘贴代码,因此可能会出现一些语法错误,但真正的代码是正确的,完成了。不明白这是如何让事情变得更清楚的:欧威尔,因为正如@Bubletan所说,i%==0
毫无意义。这使你的问题没有被认真考虑。对不起。我使用一个函数从K计算一个整数值,这是我的索引:)我有一个方法private int calc(kb),它接受不同类型的组件并从中计算一个int值。此int值用作数组中的索引。这不会告诉我谁是V
int[] arr = ... ;
Arrays.setAll(arr, i -> arr[i] == 0 ? compute() : arr[i]);
IntStream.range(0, arr.length)
.filter(i -> arr[i] == 0)
.forEach(i -> arr[i] = compute());