我有一組元組,我想得到它的值整數部分的總和。但是當我應用此代碼時,它回傳 1,而預期為 3。我想這是因為map函式的結果也回傳 aSet并且重復的結果被消除了。
object Main:
def main(args: Array[String]): Unit = {
val pairs = Set(("one", 1), ("two", 1), ("three", 1))
val sum = pairs.map(pair => pair._2).sum
println(sum) //returns 1
}
我的期望是基于這些東西在 Java 中的作業方式。Set 有不同的元素,但 Stream 直到distinct()或被使用時才.collect(toSet())使用。據此,結果如預期的那樣為 3。
import org.apache.commons.lang3.tuple.Pair;
import java.util.Set;
public class Main {
public static void main(String... args) {
var pairs = Set.of(Pair.of("one", 1), Pair.of("two", 1), Pair.of("three", 1));
var sum = pairs.stream()
.map(Pair::getRight)
.reduce(0, Integer::sum);
System.out.println(sum); //returns 3
}
}
我目前對如何實作這樣的結果(3)的假設是:
- 轉換
Set為List,但這似乎不是一個好的解決方案:
val sum = List.from(pairs).map(pair => pair._2).sum
- 使用
foldLeft:
val sum = set.foldLeft(0)((a, b) => a b._2)
但也許有更方便的方法?
uj5u.com熱心網友回復:
您可以使用iterator或view獲取所需的集合表示:
val sum = pairs.iterator.map(_._2).sum
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/440177.html
標籤:斯卡拉
