Forgor ImmutableMap does not allow null keys
This commit is contained in:
parent
5247771843
commit
859d72defb
@ -1,21 +1,25 @@
|
|||||||
package ru.dbotthepony.mc.otm.core.collect
|
package ru.dbotthepony.mc.otm.core.collect
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap
|
|
||||||
import com.google.common.collect.ImmutableSet
|
import com.google.common.collect.ImmutableSet
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap
|
||||||
import ru.dbotthepony.mc.otm.core.stream
|
import ru.dbotthepony.mc.otm.core.stream
|
||||||
import java.util.function.Supplier
|
import java.util.function.Supplier
|
||||||
import java.util.stream.Stream
|
import java.util.stream.Stream
|
||||||
|
|
||||||
class SupplierMap<K, T>(values: Stream<Pair<K, Supplier<T>>>) : Map<K, T> {
|
class SupplierMap<K, T>(values: Stream<Pair<K, Supplier<T>>>) : Map<K, T> {
|
||||||
|
private val backing = Object2ObjectLinkedOpenHashMap<K, Supplier<T>>()
|
||||||
override val entries: Set<Map.Entry<K, T>>
|
override val entries: Set<Map.Entry<K, T>>
|
||||||
override val keys: Set<K>
|
override val keys: Set<K>
|
||||||
get() = backing.keys
|
get() = backing.keys
|
||||||
override val size: Int
|
override val size: Int
|
||||||
get() = entries.size
|
get() = entries.size
|
||||||
override val values: Collection<T>
|
override val values: Collection<T>
|
||||||
private val backing = values.collect(ImmutableMap.toImmutableMap({ it.first }, { it.second }))
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
|
values.forEach {
|
||||||
|
backing[it.first] = it.second
|
||||||
|
}
|
||||||
|
|
||||||
entries = ImmutableSet.copyOf(backing.entries.map { Entry(it.key, it.value) })
|
entries = ImmutableSet.copyOf(backing.entries.map { Entry(it.key, it.value) })
|
||||||
this.values = SupplierList(backing.values)
|
this.values = SupplierList(backing.values)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user