Java 8 方法调用后如何处理转换

Java 8 方法调用后如何处理转换,java-8,java-stream,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<Som

例如,使用公共部分创建方法是很常见的

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

 return someRepo.getSome(s).andThen(toDto());
要实现这一点,getsome或ToToTo需要做哪些更改?(或类似的更改)

您可以试试

 return toDto(someRepo.getSome(s));

如果您决定不直接使用
toDto
方法(就像您现在所做的那样),您可以编写这样的自定义:

static Collector<SomeObj, ?, List<SomeObjDto>> toDtos() {
    return Collectors.mapping(SomeConverter::convert, Collectors.toList());
}
静态收集器toDtos(){
返回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());
}
公共列表getSomeObject(最终字符串s){
List someList=someRepo.getSome;
返回someList.stream().collect(toDtos());
}
公共列表getSomeOtherObject(最终字符串s){
List someList=someRepo.getSomeOther;
返回someList.stream().collect(toDtos());
}

您的问题不清楚您似乎把重点放在源代码的外观上,即“使用包含结果的方法”,这是胡说八道。当然,您可以编写
返回someRepo.getSome.stream().map(SomeConverter::convert).collect(Collectors.toList())相反,但这与您现在的代码相比没有任何改进,这避免了常见代码的重复。@Holger非常正确,但代码不应该是可读的吗?语句“returntodto(someRepo.getSome(s));”可读吗?可能只是因为方法名很短,只有1个参数。我想要更具可读性的东西,这是一件坏事吗?这是一个普通的方法调用,由一个表达式提供参数。这里没有什么是不可读的,但是如果您认为这两个表达式应该分开,您可以像在问题的代码示例中一样使用局部变量。没关系,有些人喜欢这样的分隔,所以不需要其他语法变体。谢谢!这主要是一个实验,看看我能走多远才能理解界限在哪里
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());
}