![](/img/trans.png)
[英]I need a function in java where it counts odd or even digits in a specific number and i can choose if i want the the odd or the even digits
[英]Why do I subtract 1 from the element on an even position? I need only odd positions (odd indexes) Java
我需要你的幫助。 我有任務:
return numbers.stream().map(i -> numbers.indexOf(i) % 2 != 0 ? i - 1 : i).filter(i -> i % 2 != 0)
.mapToDouble(Integer::doubleValue).average().orElseThrow(NoSuchElementException::new);
為什么我要從偶數 position 上的元素中減去 1? 我只需要奇數位置(奇數索引)。 這是圖片
您的問題出在List#indexOf(Object)
上,它總是返回遇到的第一個相等值的索引。
現在您正在處理 stream 中的值,因此減去的值將返回到 stream 中,但不會修改原始numbers
列表。 當 stream 處理第 5 個元素時,在您的示例中再次為 2,它將在原始未修改列表中查找索引,因此numbers.indexOf( 2 )
返回索引 1,這是奇數,因此i - 1
將被執行。
如果您想了解更多有關如何使用帶索引的流同時避免此類問題的信息,請查看本教程
在您的 stream 中,您使用的是indexOf
方法
返回此列表中指定元素第一次出現的索引,如果此列表不包含該元素,則返回 -1。
由於 2 出現了兩次,並且您正在處理流的元素而不是numbers
列表,因此當您第二次調用該方法時,您仍在處理第一個列表的出現,它恰好是奇數(不是偶數)position。
您應該直接使用索引而不是值。 IntStream.range()
正是您所需要的。
public static Double getOddNumsAverage(List<Integer> numbers) {
return IntStream.range(0, numbers.size())
.map(index -> index % 2 != 0 ? numbers.get(index) - 1 : numbers.get(index))
.filter(value -> value % 2 != 0)
.average()
.orElseThrow(NoSuchElementException::new);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.