方法调用后如何处理转换

时间:2018-08-01 14:44:48

标签: java-8 java-stream

通常用共同的部分来制作方法

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());

为了变得可行或为了使toD变得必要,必须进行哪些更改?(或类似的东西)

2 个答案:

答案 0 :(得分:1)

如果确定不直接使用toDto方法(如现在那样),则可以这样编写自定义mapping collector

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());
}

答案 1 :(得分:0)

您可以尝试

 return toDto(someRepo.getSome(s));