繁体   English   中英

Java8 Lambda 我可以生成 object 的新列表吗

[英]Java8 Lambda can I generate new list of object

我想知道有没有办法减少这个方法,因为唯一改变的是获取值的计数器。

List<Vo> response = daoImpl.getresult(query).stream.map(
  t-> new Vo( t.get(0,Object.class),

    t.get(1,Object.class),

    t.get(2,Object.class),

    t.get(3,Object.class),

    t.get(4,Object.class), 

    t.get(5,Object.class),

    t.get(6,Object.class), new vo2(

        t.get(7,Object.class),

       t.get(8,Object.class)

))).collect(Collectors.toList());

我的课 Vo

Public class Vo(){

private Object param1;
private Object param2;
private Object param3;
private Object param3;
private Object param4; 
private Object param5; 

private Object param6;
private Vo2 info;

--Getter and setter
 }

我的课 Vo2

Public class Vo2 (){

   private Object param7;
   private Object param8;

   --Getter and setter

}

get方法属于dao class,它返回一个元组类型的列表,该方法获取结果元组中指定的元素position的值,第一个position为0

我想知道是否可以使用 IntStream 来减少代码。

我尝试了,但我不知道构造函数如何做,go 从 position 0 到 6 我属于 object,从 7 到 8 是另一个

List<Tuple> list =daoImpl.getresult(query);

list.stream().map(v-> new Vo(IntStream.range(0,6).mapToObj(h-> v.get(h,Object.class)))). collect(Collectors.toList());

根据我对你想要什么的解释

  • 这从t.get创建了两个 arrays 的对象。
  • 第一个数组将是Vo class 构造函数的参数之一。
  • 第二个数组将是Vo2 class 构造函数的参数。
  • 那么生成的Vo2 class 将是Vo class 构造函数的参数二。
  • 它们被打包成 Object arrays 用于创建Vo object。

您可能必须在构造函数中对 arrays 进行一些转换,并迭代 arrays 以分配各个字段(或者将它们保留为 arrays 可能更容易)。

List<Vo> response = daoImpl.getresult(query).stream

        .map(t -> new Object[][]{
           // create objecsts for 0 thru 6
           IntStream.rangeClosed(0,6)
                   .mapToObj(i->t.get(i, Object.class)).toArray(Object[]::new),
           // create objects for 7 thru 8              
           Intstream.rangeClosed(7,8)
                   .mapToObj(i->t.get(i,Object.class)).toArray(Object[]::new)}).
           // create the Vo object             
           map(ob->new Vo(ob[0], new Vo2(ob[1]))).collect(Collectors.toList());

class Vo {
    
    private Object param0;
    private Object param1;
    private Object param2;
    private Object param3;
    private Object param4;
    private Object param5;
    
    private Object param6;
    private Vo2 info;
    
    public Vo(Object[] objects0Thru6, Vo2 vo2with7and8) {
        // do something with these.
    }
    
//--Getter and setter
}

关于什么

List<Vo> response = daoImpl.getresult(query).stream.map(
t-> new Vo(
    IntStream.range(0, 9)
        .map(i -> t.get(1,Object.class))
        .toArray()
))).collect(Collectors.toList());

您可以使用IntStream生成Vo的 9 构造函数 arguments。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM