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

com.simiacryptus.sparkbook.util.Java8Util.scala Maven / Gradle / Ivy

/*
 * Copyright (c) 2019 by Andrew Charneski.
 *
 * The author licenses this file to you under the
 * Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance
 * with the License.  You may obtain a copy
 * of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package com.simiacryptus.sparkbook.util

import java.util.function._

import com.simiacryptus.lang._

object Java8Util {

  implicit def cvt(fn: Int ⇒ Double): IntToDoubleFunction = {
    new IntToDoubleFunction {
      override def applyAsDouble(v: Int): Double = fn(v)
    }
  }

  implicit def cvt(fn: Int ⇒ Int): IntUnaryOperator = {
    new IntUnaryOperator {
      override def applyAsInt(operand: Int): Int = fn.apply(operand)
    }
  }

  implicit def toJavaFunction[T <: AnyRef, U <: AnyRef](fn: T ⇒ U): SerializableFunction[T, U] = {
    new SerializableFunction[T, U] {
      override def apply(x: T): U = fn.apply(x)
    }
  }

  implicit def cvtSerializableSupplier[T <: AnyRef](fn: () ⇒ T): SerializableSupplier[T] = {
    new SerializableSupplier[T] {
      override def get(): T = fn.apply()
    }
  }

  implicit def cvtUnchecked[T <: AnyRef](fn: () ⇒ T): UncheckedSupplier[T] = {
    new UncheckedSupplier[T] {
      override def get(): T = fn.apply()
    }
  }

  implicit def cvt[T <: AnyRef](fn: T ⇒ Boolean): Predicate[T] = {
    new Predicate[T] {
      override def test(t: T): Boolean = fn.apply(t)
    }
  }

  implicit def cvtSerializableCallable[T <: AnyRef](fn: () ⇒ T): SerializableCallable[T] = {
    new SerializableCallable[T] {
      override def call(): T = fn.apply()
    }
  }

  implicit def cvtSerializableRunnable(fn: () ⇒ Unit): SerializableRunnable = {
    new SerializableRunnable {
      override def run(): Unit = fn.apply()
    }
  }

  implicit def cvtSerializableRunnable[T <: AnyRef](fn: T ⇒ Unit): SerializableConsumer[T] = {
    new SerializableConsumer[T] {
      override def accept(t: T): Unit = fn.apply(t)
    }
  }

  implicit def cvt[T <: AnyRef, U <: AnyRef, R <: AnyRef](fn: (T, U) ⇒ R): BiFunction[T, U, R] = {
    new BiFunction[T, U, R] {
      override def apply(t: T, u: U) = fn.apply(t, u)
    }
  }

  implicit def cvt[T <: AnyRef](fn: (T, T) ⇒ T): BinaryOperator[T] = {
    new BinaryOperator[T] {
      override def apply(t: T, u: T) = fn.apply(t, u)
    }
  }

  implicit def cvt[T <: AnyRef](fn: () ⇒ Double): DoubleSupplier = {
    new DoubleSupplier {
      override def getAsDouble: Double = fn.apply()
    }
  }

  implicit def cvt[T](fn: T ⇒ Double): ToDoubleFunction[T] = {
    new ToDoubleFunction[T] {
      override def applyAsDouble(v: T): Double = fn(v)
    }
  }

  implicit def cvt(fn: Double ⇒ Double): DoubleUnaryOperator = {
    new DoubleUnaryOperator {
      override def applyAsDouble(v: Double): Double = fn(v)
    }
  }

  implicit def cvt[T, U](fn: (T, U) ⇒ Double): ToDoubleBiFunction[T, U] = {
    new ToDoubleBiFunction[T, U] {
      override def applyAsDouble(v: T, u: U): Double = fn(v, u)
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy