我想将流Stream<Car>
映射到Map<String, List<Car<StudentInGroup>>>
这样的地图,其中Car
类是这样的:
public class Car<T> {
Optional<T> studentInGroup;
public Car()
{
}
public Optional<T> getStudentInGroup() {
return studentInGroup;
}
public void setStudentInGroup(T studentInGroup) {
this.studentInGroup=Optional.of(studentInGroup);
}
}
和StudentInGroup
就像
public class StudentInGroup {
private String name;
private boolean isGirl;
private int age;
}
因此,我想根据StudenInGroup
的名称字段来构建地图,但车内的Optional<StudentInGroup>
不是Optional.empty()
,而我想用它代替如果在特定的猫中,studentIngroup字段等于Optional.empty()
,则为“ none”。
Map<String, List<Car<StudentInGroup>>> stringStudentInGroupMap38= studentInGroupStreamSupplier.get().map((StudentInGroup studentInGroup)->{Car<StudentInGroup> car=new Car<StudentInGroup>();car.setStudentInGroup(studentInGroup);return car;}).collect(Collectors.groupingBy(car->car.getStudentInGroup().orElseGet(... do something with student there).getName())
可能的解决方案是创建一个“不包含StudentInGroup”,其getName将返回所需的数据,但这种方法看起来不正确。但是<我没有找到任何方法来保留原始Stream<Car>
而不将其映射到其他Streams并在Car.StudentInGroup.Name上强制分组,如果Optional<StudenInGroup>
为空,则将其强制为“ none”。欢迎提供任何清晰易读的编码建议!
答案 0 :(得分:3)
只需使用 if slot_value is not in ['accepted', 'values']:
prompt = "The slot value is invalid, say something else"
return handler_input.response_builder.ask(prompt).add_directive(
ElicitSlotDirective(
slot_to_elicit=slot_name
)).response
收集器并映射groupingBy()
即可获取密钥:
Optional