Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java中的供应商枚举获取字符串值_Java_Lambda_Enums - Fatal编程技术网

从java中的供应商枚举获取字符串值

从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(

我有一个实施供应商的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(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());
    }