java获取数组错误和流条件的键
我想从数组中获取密钥并将它们放入List
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 cannot be applied to the given types.
我知道,因为它是一个IntStream
,我在我的列表中得到int,对吗?我的类型是K,但即使不使用泛型,也不会有任何变化
第二个问题:
我想知道如何迭代该数组 并在指定索引上设置数据。 但条件是,如果该索引上已经有一个值,我将重新计算该键。 假设我想写一些类似的东西:
if (arr[i]==0) {
// do something and return
} else {
// do something else and return
}
我不明白这里怎么了。我使用的代码与某些Internet页面上的代码相同
# 1 楼答案
您正在lambda中使用类型
K
,但数组的类型为V
。我不知道这些类型的化学需氧量是从哪里来的,但显然它们不兼容。要编译此文件,您应该有V extends K
# 2 楼答案
第一个问题,
这不起作用,因为
filter
的输出是一个IntStream
,它没有一个argcollect
方法。如果要收集到List
,则需要将int
值从IntStream
转换为引用类型的对象。我不知道如何从数组中得到K
的值。K
是arr
的元素类型吗?如果是这样,那么您应该像这样使用mapToObj
:如果这样做有效,那么在
Collectors.toList()
调用中可能不需要类型witness<K>
对于第二个问题,您可以使用
Arrays.setAll
有条件地设置数组的元素:这基本上是对数组索引运行
IntStream
的简写。事实上,这就是它的实现方式或者,在数组索引上写出
IntStream
,过滤掉不想分配的索引,然后在forEach
内进行分配: