package io.gitlab.jfronny.libjf.mainhttp.impl.util; import it.unimi.dsi.fastutil.chars.Char2ObjectArrayMap; import it.unimi.dsi.fastutil.chars.Char2ObjectMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; public class Trie { public final Char2ObjectMap> next; public T content; public Trie() { this.next = new Char2ObjectArrayMap<>(); } public void add(Map next) { next.forEach(this::add); } public void add(String key, T value) { if (key.isEmpty()) this.content = value; else this.next.computeIfAbsent(key.charAt(0), k -> new Trie<>()) .add(key.substring(1), value); } public static Trie of(Map source) { Trie root = new Trie<>(); root.add(source); return root; } public static Trie of(List source) { return of(source.stream().collect(Collectors.toMap(Function.identity(), Function.identity()))); } }