考虑T
是Group
类,S
是Option
类。
我有以下代码:
public static class Group {
List<Option> options;
public List<Option> getOptions() {
return options;
}
public void setOptions(List<Option> options) {
this.options = options;
}
public Group(List<Option> options) {
this.options = options;
}
}
public static class Option {
int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Option(int id) {
this.id = id;
}
}
public static void main(String[] args) {
final Option option1 = new Option(1);
final Option option2 = new Option(2);
final Option option3 = new Option(3);
final Option option4 = new Option(4);
final Option option5 = new Option(5);
final Option option6 = new Option(6);
final Group group1 = new Group(Arrays.asList(option1, option2));
final Group group2 = new Group(Arrays.asList(option3, option4, option5, option6));
}
我想创建Map,其中optionId是一个键,group将是一个值
因此它应该是
1 - group1
2 - group1
3 - group2
4 - group2
5 - group2
6 - group2
stream api是否允许解决此任务?
答案 0 :(得分:2)
你可以这样做:
Stream.of(group1, group2)
.flatMap(p -> p.getOptions().stream().map(q -> new Pair<>(p,q)))
.collect(Collectors.toMap(
p -> p.getValue().getId(),
p -> p.getKey()));
此示例中的对是javafx.util.Pair
,但如果首选,则可以使用其他对象。
答案 1 :(得分:0)
请尝试以下操作,但我认为您的输出3-6意味着是group2。
final Map<Number,String> m = new HashMap<>();
group1.getOptions().stream().forEach(p -> {m.put(p.getId(), "group1");});
group2.getOptions().stream().forEach(p -> {m.put(p.getId(), "group2");});
System.out.println(m);