java-8 - 方法调用后如何处理转换
问题描述
例如,用公共部分制作方法很常见
public List<SomeObjDto> getSomeObject(final String s) {
List<SomeObj> someList = someRepo.getSome(s);
return toDto(someList);
}
public List<SomeObjDto> getSomeOtherObject(final String s) {
List<SomeObj> someList = someRepo.getSomeOther(s);
return toDto(someList);
}
private List<SomeObjDto> toDto(final List<SomeObj> list) {
return list.stream()
.map(SomeConverter::convert)
.collect(Collectors.toList());
}
所以不是写地图和收集 toDto 方法。有没有办法让该方法不包含结果?例如像这样写
return someRepo.getSome(s).stream.toDto();
或喜欢
return someRepo.getSome(s).andThen(toDto());
getsome 或 toDto 需要进行哪些更改才能使这成为可能?(或类似的东西)
解决方案
如果您决定不toDto
直接使用方法(就像现在一样),您可以编写一个自定义映射收集器,如下所示:
static Collector<SomeObj, ?, List<SomeObjDto>> toDtos() {
return Collectors.mapping(SomeConverter::convert, Collectors.toList());
}
其用法将为您提供以下内容:
public List<SomeObjDto> getSomeObject(final String s) {
List<SomeObj> someList = someRepo.getSome(s);
return someList.stream().collect(toDtos());
}
public List<SomeObjDto> getSomeOtherObject(final String s) {
List<SomeObj> someList = someRepo.getSomeOther(s);
return someList.stream().collect(toDtos());
}
推荐阅读
- excel - 有没有办法将任意数量的单元格分组到一个表格中?
- python - 捕获子进程的实时输出而不阻塞它
- php - Laravel 8 急切加载
- masstransit - MassTransit Kafka 在运行时添加生产者
- c# - Dapper - 使用一对多和多对多关系的数据库查询创建对象
- java - 通过 java API 进行 Oracle BPM 故障恢复
- mysql - 最后添加的日期未显示在表格中
- powershell - Powershell:如果有名称相似的文件,则删除除一个以外的所有文件
- python - 将 int 32 位转换为 bool 数组
- react-native - 此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 7.0 不兼容。为什么会出现这个错误?