我正在尝试但失败,使用Java 8和流检索所有Enum值并将它们放在列表中。到目前为止,我已经尝试了以下两种方法,但是没有一种返回值。
我在做什么错了?
代码:
public class Main {
public static void main(String[] args) {
List<String> fruits1 = Stream.of(FruitsEnum.values())
.map(FruitsEnum::name)
.collect(Collectors.toList());
List<String> fruits2 = Stream.of(FruitsEnum.values().toString())
.collect(Collectors.toList());
// attempt 1
System.out.println(fruits1);
// attempt 2
System.out.println(fruits2);
}
enum FruitsEnum {
APPLE("APPL"),
BANANA("BNN");
private String fruit;
FruitsEnum(String fruit) {this.fruit = fruit;}
String getValue() { return fruit; }
}
}
输出:
[APPLE, BANANA]
[[LMain$FruitsEnum;@41629346]
所需:
["AAPL", "BNN"]
答案 0 :(得分:7)
您需要map
和getValue
List<String> fruits = Stream.of(FruitsEnum.values())
.map(FruitsEnum::getValue) // map using 'getValue'
.collect(Collectors.toList());
System.out.println(fruits);
这将为您提供输出
[APPL, BNN]
答案 1 :(得分:5)
这应该可以解决问题:
Arrays.stream(FruitsEnum.values())
.map(FruitsEnum::getValue)
.collect(Collectors.toList());
答案 2 :(得分:2)
使用EnumSet
是另一种方式:
List<String> fruits = EnumSet.allOf(FruitsEnum.class)
.stream()
.map(FruitsEnum::getValue)
.collect(Collectors.toList());