From d29aed077d833c8c2f4be3287a848f877cd80846 Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Mon, 10 Oct 2022 16:22:14 +0700 Subject: [PATCH] More constructors for supplier map/list --- .../ru/dbotthepony/mc/otm/core/SupplierList.kt | 16 ++++++++++++++-- .../ru/dbotthepony/mc/otm/core/SupplierMap.kt | 5 +++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierList.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierList.kt index 603b899d7..aa47888fc 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierList.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierList.kt @@ -1,5 +1,8 @@ package ru.dbotthepony.mc.otm.core +import java.util.function.Supplier +import java.util.stream.Stream + class SupplierList : AbstractList { private val getters: Array<() -> T> @@ -7,8 +10,17 @@ class SupplierList : AbstractList { this.getters = Array(getters.size) { getters[it] } } - constructor(getters: List<() -> T>) : super() { - this.getters = Array(getters.size) { getters[it] } + constructor(getters: Collection<() -> T>) : super() { + val iterator = getters.iterator() + this.getters = Array(getters.size) { iterator.next() } + } + + constructor(getters: Stream<() -> T>) : super() { + this.getters = getters.toArray(::arrayOfNulls) + } + + constructor(vararg getters: Supplier) : super() { + this.getters = Array(getters.size) { getters[it]::get } } constructor(size: Int, provider: (Int) -> () -> T) { diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierMap.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierMap.kt index 744459899..3b15b9c08 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierMap.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/SupplierMap.kt @@ -1,6 +1,7 @@ package ru.dbotthepony.mc.otm.core import com.google.common.collect.ImmutableSet +import java.util.stream.Stream class SupplierMap : AbstractMap { override val entries: Set> @@ -13,6 +14,10 @@ class SupplierMap : AbstractMap { entries = ImmutableSet.copyOf(mValues.map { Entry(it.first, it.second) }) } + constructor(mValues: Stream T>>) : super() { + entries = mValues.map { Entry(it.first, it.second) }.collect(ImmutableSet.toImmutableSet()) + } + constructor(mValues: Map T>) : super() { entries = ImmutableSet.copyOf(mValues.map { Entry(it.key, it.value) }) }