在 Scala 中求和设置值

Summing Set values in Scala

我有一组元组,我想得到它的值整数部分的总和。但是,当我应用此代码时,它 returns 1,而预期为 3。我想这是因为 map 函数的结果也 returns 一个 Set 并且重复的结果被消除了。

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) 的假设是:

  1. Set转换为List,但似乎不是一个好的解决方案:
 val sum = List.from(pairs).map(pair => pair._2).sum
  1. 使用foldLeft:
val sum = set.foldLeft(0)((a, b) => a + b._2)

但也许还有更方便的方法?

您可以使用 iterator or view 获取所需的集合表示:

val sum = pairs.iterator.map(_._2).sum