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

cats.syntax.set.scala Maven / Gradle / Ivy

The newest version!
package cats.syntax

import scala.collection.immutable.{SortedMap, SortedSet}
import cats.data.NonEmptySet
import cats.Order

trait SetSyntax {
  implicit final def catsSyntaxSet[A](se: SortedSet[A]): SetOps[A] = new SetOps(se)
}

final class SetOps[A](private val se: SortedSet[A]) extends AnyVal {

  /**
   * Returns an Option of NonEmptySet from a SortedSet
   *
   * Example:
   * {{{
   * scala> import scala.collection.immutable.SortedSet
   * scala> import cats.data.NonEmptySet
   * scala> import cats.implicits._
   *
   * scala> val result1: SortedSet[Int] = SortedSet(1, 2)
   * scala> result1.toNes
   * res0: Option[NonEmptySet[Int]] = Some(TreeSet(1, 2))
   *
   * scala> val result2: SortedSet[Int] = SortedSet.empty[Int]
   * scala> result2.toNes
   * res1: Option[NonEmptySet[Int]] = None
   * }}}
   */
  def toNes: Option[NonEmptySet[A]] = NonEmptySet.fromSet(se)

  /**
   * Groups elements inside this `SortedSet` according to the `Order` of the keys
   * produced by the given mapping function.
   *
   * {{{
   * scala> import cats.data.NonEmptySet
   * scala> import scala.collection.immutable.{SortedMap, SortedSet}
   * scala> import cats.implicits._
   *
   * scala> val sortedSet = SortedSet(12, -2, 3, -5)
   *
   * scala> val expectedResult = SortedMap(false -> NonEmptySet.of(-5, -2), true -> NonEmptySet.of(3, 12))
   *
   * scala> sortedSet.groupByNes(_ >= 0) === expectedResult
   * res0: Boolean = true
   * }}}
   */
  def groupByNes[B](f: A => B)(implicit B: Order[B]): SortedMap[B, NonEmptySet[A]] = {
    implicit val ordering: Ordering[B] = B.toOrdering
    toNes.fold(SortedMap.empty[B, NonEmptySet[A]])(_.groupBy(f).toSortedMap)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy