根据 Scala 中的条件从同一集合的元素创建一个 Map

Create a Map from the elements of the same set based on condition in Scala

我有一个如下形式的Hashset,它可能会变大:

var hs = HashSet(("fox", "name"),
    ("animal", "type"),
    ("gender", "type"),
    ("x", "test"),
    ("x", "nottest"),
    ("z", "test"),
    ("z", "nottest"))

从中获取具有以下形式的地图的最佳方法是什么:

HashMap (("x", "test")-> ("x", "nottest"),("z", "test") ->("z", "nottest"))

即映射来自同一集合的元组,其中它们具有相同的第一个元素,第二个元素以 "not".

为前缀

您可以创建所有可能的对并过滤掉原始集中不存在的对:

hs.map { case(k, v) => (k, v) -> (k, "not" + v) }
  .filter { case(pos, neg) => hs.contains(neg) }
  .toMap

编辑:

如果集合变得非常大,那么我们可以很容易地改变顺序 - 首先检查和过滤只有否定的对,然后映射:

hs.filter { case(k, v) => hs((k, "not" + v)) }
  .map { case(k, v) => (k, v) -> (k, "not" + v) }
  .toMap