gpt4 book ai didi

java - 目标列表迭代映射结构

转载 作者:行者123 更新时间:2023-11-30 05:47:57 26 4
gpt4 key购买 nike

我正在使用 mapstruct 并尝试映射 2 种不同类型的对象。这就是要求。
目标对象结构如下(层次结构)

List<Object1>
Object1 have List<Object2>
Object 2 have List<Object3>
Object 3 have List<Object4>

每个都有 String 对象来从源分别映射 ListObject 和 StringObject

SourceObject 在同一类中:

List<SourceObject1>
List<SourceObject2>
List<SourceOject3>

映射要求是:

Object1 have to map with SourceObject1
Object2 have to map with SourceObject2
Object3 have to map with SourceObject3

我使用的是1.2.0.Final版本并且能够映射Object1 必须与 SourceObject1 映射

//List to List mapping
@Mapping(target = "Object1", source = "SourceObject1")
Target from(Source);
@Mapping(target = "Object1[0].Object2", source = "SourceObject2")
Mapping(target = "Object1[0].Object3", source = "SourceObject3")
//not casting and not mapping working.Also Need to map String fields under
list Object.

最佳答案

很简单,你只需要让mapstruct发挥它的魔力!一个简单的例子:

目标类:

public class Object1 {
private List<Object2> list;

public List<Object2> getList() {
return list;
}

public void setList(List<Object2> list) {
this.list = list;
}
}

public class Object2 {
private List<Object3> list;

public List<Object3> getList() {
return list;
}

public void setList(List<Object3> list) {
this.list = list;
}
}

public class Object3 {
private List<Object4> list;

public List<Object4> getList() {
return list;
}

public void setList(List<Object4> list) {
this.list = list;
}
}

public class Object4 {
private String field;

public String getField() {
return field;
}

public void setField(String field) {
this.field = field;
}
}

源类:

public class SourceObject1 {
private List<SourceObject2> list;

public List<SourceObject2> getList() {
return list;
}

public void setList(List<SourceObject2> list) {
this.list = list;
}
}

public class SourceObject2 {
private List<SourceObject3> list;

public List<SourceObject3> getList() {
return list;
}

public void setList(List<SourceObject3> list) {
this.list = list;
}
}

public class SourceObject3 {
private List<SourceObject4> list;

public List<SourceObject4> getList() {
return list;
}

public void setList(List<SourceObject4> list) {
this.list = list;
}
}

public class SourceObject4 {
private String field;

public String getField() {
return field;
}

public void setField(String field) {
this.field = field;
}
}

映射器的定义:

@Mapper
public interface MapperExample {

Object1 map(SourceObject1 source);

Object2 map(SourceObject2 source);

Object3 map(SourceObject3 source);

Object4 map(SourceObject4 source);
}

生成的代码:

@Override
public Object1 map(SourceObject1 source) {
if ( source == null ) {
return null;
}

Object1 object1 = new Object1();

object1.setList( sourceObject2ListToObject2List( source.getList() ) );

return object1;
}

@Override
public Object2 map(SourceObject2 source) {
if ( source == null ) {
return null;
}

Object2 object2 = new Object2();

object2.setList( sourceObject3ListToObject3List( source.getList() ) );

return object2;
}

@Override
public Object3 map(SourceObject3 source) {
if ( source == null ) {
return null;
}

Object3 object3 = new Object3();

object3.setList( sourceObject4ListToObject4List( source.getList() ) );

return object3;
}

@Override
public Object4 map(SourceObject4 source) {
if ( source == null ) {
return null;
}

Object4 object4 = new Object4();

object4.setField( source.getField() );

return object4;
}

protected List<Object2> sourceObject2ListToObject2List(List<SourceObject2> list) {
if ( list == null ) {
return null;
}

List<Object2> list1 = new ArrayList<Object2>( list.size() );
for ( SourceObject2 sourceObject2 : list ) {
list1.add( map( sourceObject2 ) );
}

return list1;
}

protected List<Object3> sourceObject3ListToObject3List(List<SourceObject3> list) {
if ( list == null ) {
return null;
}

List<Object3> list1 = new ArrayList<Object3>( list.size() );
for ( SourceObject3 sourceObject3 : list ) {
list1.add( map( sourceObject3 ) );
}

return list1;
}

protected List<Object4> sourceObject4ListToObject4List(List<SourceObject4> list) {
if ( list == null ) {
return null;
}

List<Object4> list1 = new ArrayList<Object4>( list.size() );
for ( SourceObject4 sourceObject4 : list ) {
list1.add( map( sourceObject4 ) );
}

return list1;
}

关于java - 目标列表迭代映射结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54524913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com