All Downloads are FREE. Search and download functionalities are using the official Maven repository.

izumi.fundamentals.collections.impl.IzIterOnceMappings.scala Maven / Gradle / Ivy

package izumi.fundamentals.collections

import scala.annotation.nowarn
import scala.collection.compat.*
import scala.collection.mutable

@nowarn("msg=Unused import")
final class IzIterOnceMappings[A, B](private val list: IterableOnce[(A, B)]) extends AnyVal {
  import scala.collection.compat._

  @nowarn("msg=deprecated")
  def toMultimapMut: MutableMultiMap[A, B] = {
    list.iterator.foldLeft(new mutable.HashMap[A, mutable.Set[B]] with mutable.MultiMap[A, B]) {
      (acc, pair) =>
        acc.addBinding(pair._1, pair._2)
    }
  }

  def toMultimapView = {
    toMultimapMut.view.mapValues(_.view)
  }

  def toMultimap: ImmutableMultiMap[A, B] = {
    toMultimapMut.view.mapValues(_.toSet).toMap
  }
}

@nowarn("msg=Unused import")
final class IzIterMappings[A, B](private val list: Iterable[(A, B)]) extends AnyVal {

  import scala.collection.compat._

  def toUniqueMap[E](onConflict: Map[A, List[B]] => E): Either[E, Map[A, B]] = {
    val grouped = list.groupBy(_._1)
    val bad = grouped.filter(_._2.size > 1)

    if (bad.isEmpty) {
      Right(list.toMap)
    } else {
      Left(onConflict(bad.view.mapValues(_.map(_._2).toList).toMap))
    }

  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy