我正在结合Lombok和构建器模式使用MapSTRt。我有一个问题,即MapSTRt正在对生成的映射器函数中的所有参数进行显式空检查,并在所有参数为空的情况下提前退出,例如:
// Object A
@Value
@Builder(builderClassName = "Builder")
public class SourceA{
private int a;
}
// Object B
@Value
@Builder(builderClassName = "Builder")
public class SourceB{
private int a;
}
// Object C
@Value
@Builder(builderClassName = "Builder")
public class SourceC{
private int a;
}
// Object Target
@Value
@Builder(builderClassName = "Builder")
public class Target{
private int a;
private int b;
private int c;
}
// Mapper
@Mapper(componentModel = "spring")
public interface Mapper {
@Mappings({
@Mapping(target = "a", source = "sourceA.a"),
@Mapping(target = "b", source = "sourceB.a"),
@Mapping(target = "c", source = "sourceC.a")
})
Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC);
};
// mapstruct impl
// Auto Generated by MapStruct!
public class MapperImpl implements Mapper {
public Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC){
// Problamatic line
if (sourceA == null && sourceB == null && sourceC == null) {
return null;
} else {
Target.Builder builder = Target.builder();
// map objects
return builder.builder();
}
}
}
我想实现MapStruct不实现完整的空检查。即使所有参数都为null,它也应该设置整个生成器,并在生成器进行null检查(如果有)时调用build。
为了实现所需的目标,请始终使用NullValueMappingStrategy
创建目标对象的默认实例。
在mapper上,您可以执行@mapper(nullValueMappingStrategy=nullValueMappingStrategy.RETURN_DEFAULT)
当您执行此操作时,生成的代码应该如下所示:
public class MapperImpl implements Mapper {
public Target toTarget(SourceA sourceA, SourceB sourceB, SourceC sourceC){
Target.Builder builder = Target.builder();
// map objects
return builder.builder();
}
}
流接口中的映射函数定义如下: 函数参数列表与函数接口自己的规范一致 方法是 这意味着它需要一个T,但返回一个R。但我正在运行这个代码 奇怪的是,为什么它能工作,但论点类型似乎不匹配?没有简单的方法来解释它,但我的理解是,一个函数应该接受类型T的输入并返回类型R。当它在流中使用时,它接受类型String的输入并返回类型int(即String.length())。但是小溪。map被键入以返回与流相同的
我对流图法有点困惑。有一些简单的源代码可以运行: map()签名:Stream map(函数 在我的选择中,我认为赋予文字的功能。stream()。map应该有1个参数,但是string::length没有任何输入参数,只返回int。 它看起来像word流调用字符串中的每个元素“word”。长度(),但我不知道该怎么做?为什么string::length签名不需要与函数签名(R apply(T))
陈述 我想去 但是显然没有使用...因为它不是切肉刀,我想了解更多关于函数及其传递参数的方式。 所以我尝试附加一个使用map函数列表的所有元素。但在此之前,是一个方法,而不是一个方法。 最后一个映射函数返回TypeError: 我想知道是否可以将参数传递给使用的方法。感谢
我想在sql语句中使用一个名为tags的参数: 我通过以下方式传递参数并执行语句: 如果我将语句更改为: 它抛出错误: 类org.springframework.jdbc.badsqlgrammareXception PreparedStatementCallback;错误的SQL语法[SELECT*FROM reply WHERE(?,?)@>array[2293,2294];嵌套异常是org.
使用,并希望将常量/参数传递给自定义映射器 我的目的地具有 Map 类型的字段
映射函数是一组可以连续应用于一个或多个元素列表的函数。 将这些函数应用于列表的结果将放在新列表中,并返回新列表。 例如, mapcar函数处理一个或多个列表的连续元素。 mapcar函数的第一个参数应该是一个函数,其余参数是应用函数的列表。 参数函数应用于导致新构造的列表的连续元素。 如果参数列表的长度不相等,则映射过程在到达最短列表的末尾时停止。 结果列表将具有与最短输入列表相同数量的元素。 例