我有一个包含整数的arraylist,希望将其转换为boolean的arraylist。
我尝试过的包含循环的代码是否还有其他更快的方法可以做到这一点。
使用的样品。
private ArrayList<Boolean> changeThis(ArrayList<Integer> arr){
ArrayList<Boolean> a = new ArrayList<>();
for(int i=0 ; i < arr.size() ; i++){
a.add(arr.get(i) == 1);
}
return a;
}
,上述方法的输入如下:
changeThis(arr);//arr has [1,0,1,0,0,0]
答案 0 :(得分:3)
编辑:给出实际值为value[index] == 1
的更新,答案当然是:
return incomingList.stream().map( (number) -> number == 1 ).collect(Collectors.toList());
然后可以将其更改为使用parallelStream()
以获得结果 quick 。当然,当谈论列表中的大个数字时,并行解决方案只会减少整体运行时间!对于小型数据集,使用stream()
或parallelStream()
最有可能增加计算结果列表所需的时间。
另一件事要看:数字实际上是哪里来的?也许有机会使用IntStream
而不是List<Integer>
。
出于完整性考虑,基于我们需要与 index 而不是1
进行比较的假设,得出初始答案:
实际上,这是没有 改进方法的场合之一(措辞除外,因为变量名实际上毫无意义)。
问题是:为了计算条件,您需要将列表位置与其 index 进行比较。
因此,您需要进行计数循环(以某种方式)。任何基于stream()
的解决方案都需要付出额外的努力才能获得该信息;使用foreach()
时也是如此。
所以,长话短说:在这里使用“老派”迭代方式!
答案 1 :(得分:3)
您可以使用流:
private ArrayList<Boolean> changeThis(ArrayList<Integer> arr){
return arr.stream().map(e -> (e == 1) ).collect( Collectors.toCollection( ArrayList::new ) );
}