首页 > 解决方案 > 方法调用后如何处理转换

问题描述

例如,用公共部分制作方法很常见

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 需要进行哪些更改才能使这成为可能?(或类似的东西)

标签: java-8java-stream

解决方案


如果您决定不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());
}

推荐阅读