J'ai essayé de collecter et d'implémenter des informations sur "Recherche de Java Enum par un autre élément", dont on parle parfois. Je pense que c'est décent, mais il y a de nombreux problèmes qui ne peuvent pas être résolus.
test.java
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.function.*;
interface Searchable {
public static <T extends Enum,N extends Comparable> Optional<T> getByCode(Supplier<T[]> v,Function<T,N> s,N code)
{
return Arrays.stream(v.get())
.filter(data -> s.apply(data).equals(code))
.findFirst();
}
}
enum TestEnum implements Searchable {
A(1),B(2),C(3);
private final Integer id;
private TestEnum (int id) { this.id = id;}
public Integer getId() { return id; }
public static Optional<TestEnum> getById(Integer id){
return Searchable.getByCode(TestEnum::values,TestEnum::getId,id);
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
TestEnum.getById(2).ifPresent(System.out::println);
}
}
L'élément clé est
pourtant
Il y a de nombreux endroits à craindre Pour être honnête, il serait plus pratique d'ajouter une API d'identification et de recherche en ajoutant des accesseurs de classe enum et des accesseurs membres à la bibliothèque Lombok.
Il semble bon de mettre ce que vous avez dans les commentaires au cœur de l'utilisation.