首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java8 Lambda我可以生成新的对象列表

Java8 Lambda我可以生成新的对象列表
EN

Stack Overflow用户
提问于 2021-02-25 16:47:45
回答 2查看 136关注 0票数 0

我想知道是否有一种方法来减少这个方法,因为唯一改变的是获得值的计数器。

代码语言:javascript
复制
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());

我的班级

代码语言:javascript
复制
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

代码语言:javascript
复制
Public class Vo2 (){

   private Object param7;
   private Object param8;

   --Getter and setter

}

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

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

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

代码语言:javascript
复制
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());
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-25 18:00:25

基于我对你想要的东西的理解

这将从t.get.

  • the创建两个对象数组,第一个数组将是参数,一个是Vo类中的一个,constructor.

  • the第二个数组将是Vo2类constructor.

  • then的一个参数,得到的Vo2类将是参数,Vo类中的两个将被打包成用于创建Vo对象的对象数组。

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

代码语言:javascript
复制
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
}
票数 2
EN

Stack Overflow用户

发布于 2021-02-25 17:02:23

关于

代码语言:javascript
复制
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个构造函数参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66372840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档