2017-11-01 3 views
0

mapstructを使用して、反復できない値、つまり文字列を文字列のリストにマップしようとしています。ここでabc だから私は使用していますmapstructの反復可能でないiterableへのマップ

@Mapping(target = "abc", expression = "java(java.util.Arrays.asList(x.getY().getXyz()))") 

List<String>

xyzString

である。しかし、このために、私は明示的にnullをチェックする必要があります。

反復可能でないものを反復可能に変換することによって、反復不可能な反復可能なものを作成する方法がありますか。

答えて

1

を持っている@Qualifierを使用することができますすることのための一例である非反復可能なツー反復可能:

public class Source { 

    private String myString; 

    public String getMyString() { 
     return myString; 
    } 

    public void setMyString(String myString) { 
     this.myString = myString; 
    } 

} 

public class Target { 

    private List<String> myStrings; 

    public List<String> getMyStrings() { 
     return myStrings; 
    } 

    public void setMyStrings(List<String> myStrings) { 
     this.myStrings = myStrings; 
    } 

} 

@Qualifier 
@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.SOURCE) 
public @interface FirstElement { 
} 

public class NonIterableToIterableUtils { 

    @FirstElement 
     public List<String> first(String in) { 
      if (StringUtils.isNotEmpty(in)) { 
       return Arrays.asList(in); 

      } else { 
       return null; 
      } 
     } 

} 

@Mapper(uses = NonIterableToIterableUtils.class) 
public interface SourceTargetMapper { 

    SourceTargetMapper MAPPER = Mappers.getMapper(SourceTargetMapper.class); 

    @Mappings({ 
     @Mapping(source = "myString", target = "myStrings", qualifiedBy = FirstElement.class) 
    }) 
    Target toTarget(Source s); 
} 

public class Main { 

    public static void main(String[] args) { 
     Source s = new Source(); 
     s.setMyString("Item"); 

     Target t = SourceTargetMapper.MAPPER.toTarget(s); 
     System.out.println(t.getMyStrings().get(0)); 

    } 

} 
0

MapStructの例のリポジトリには、iterable-to-non-iterableの例があります。さらに、non-iterable-to-iterableの保留中のプルリクエストがあります。

簡単に言えば、マッピングを行うカスタムメソッドを使用できます。あなたはまた、より多くのgranural制御ここで

関連する問題