从java中的供应商枚举获取字符串值
我有一个实施供应商的enum,例如:从java中的供应商枚举获取字符串值,java,lambda,enums,Java,Lambda,Enums,我有一个实施供应商的enum,例如: public enum QUERY_FIELD implements Supplier<String> { PRODUCT_TYPE("ProductType"), MIN_NUMBER_OF_PARTS("MinNumberOfParts"), MAX_NUMBER_OF_PARTS("MaxNumberOfParts"); private final String id; QUERY_FIELD(
public enum QUERY_FIELD implements Supplier<String> {
PRODUCT_TYPE("ProductType"),
MIN_NUMBER_OF_PARTS("MinNumberOfParts"),
MAX_NUMBER_OF_PARTS("MaxNumberOfParts");
private final String id;
QUERY_FIELD(final String id) {
this.id = id;
}
@Override
public final String get() {
return id;
}
}
公共枚举查询\u字段实现供应商{
产品类型(“产品类型”),
零件的最小数量(“零件的最小数量”),
零件的最大数量(“MaxNumberOfParts”);
私有最终字符串id;
查询字段(最终字符串id){
this.id=id;
}
@凌驾
公共最终字符串get(){
返回id;
}
}
我有不同的实用工具方法,可以根据查询找到我搜索的枚举
public static <T extends Enum<T> & Supplier<String>> Optional<T> findById(final Class<T> enumClass, final String id) {
return Arrays.stream(enumClass.getEnumConstants()).filter(p -> id.equalsIgnoreCase(p.get())).findFirst();
}
public static <T extends Enum<T> & Supplier<? extends Number>> Optional<T> findById(final Class<T> enumClass, final Number id) {
return Arrays.stream(enumClass.getEnumConstants()).filter(p -> id.equals(p.get())).findFirst();
}
public静态可选findById(最终类enumClass,最终字符串id){
返回Arrays.stream(enumClass.getEnumConstants()).filter(p->id.equalsIgnoreCase(p.get()).findFirst();
}
publicstatic我想您在运行时遇到的问题
如中所述,是由Java-8中的已知错误引起的
问题在于交叉点边界Enum&supplier“不工作”是什么意思?你期望得到什么样的输出?你为什么不把你的枚举实例命名为ProductType
,MinNumberOfParts
等等,然后你就可以使用values()
和.name()
等等了,我相信你的问题已经解决了。为了找到原因,我不得不复制你的代码(使用一些mod)并获取运行时堆栈跟踪。然后我只需要搜索异常类和错误消息来找到解决方案。说这句话只是为了指出在你的问题/帖子中包含你收到的错误信息有多重要,而不是说它不起作用。
public static <T extends Enum<T> & Supplier<? extends String>> List<String> getValueList(final Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants()).map(Supplier::get).collect(Collectors.toList());
}
public static <U, T extends Enum<T> & Supplier<? extends U>> List<U> getValueList(final Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants()).map(Supplier::get).collect(Collectors.toList());
}
import java.util.function.*;
import java.util.*;
import java.util.stream.*;
enum Test implements Supplier<String> {
A, B, C;
public String get() { return name(); }
}
class Main {
public static <T extends Supplier<String>> List<String> getValueList(final Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants())
.map(Supplier::get)
.collect(Collectors.toList());
}
public static final void main(String[] args) {
System.out.println(getValueList(Test.class).stream()
.collect(Collectors.joining(",")));
}
}
public static <T extends Enum<T> & Supplier<String>> List<String> getValueList(final Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants())
.map(x -> (Supplier<String>) x) // not needed to compile but needed for run-time.
.map(Supplier::get)
.collect(Collectors.toList());
}
public static <T extends Enum<T> & Supplier<String>> List<String> getValueList(final Class<T> enumClass) {
final Class<Supplier<String>> asSupplierClass = enumClass;
return Arrays.stream(asSupplierClass.getEnumConstants())
.map(Supplier::get)
.collect(Collectors.toList());
}