Java:将sql行数据拆分为多个列表

时间:2018-01-10 14:59:20

标签: java

我有一个具有多个列表依赖关系的类,如下所示。

class Test{
    private List<Image> images;
    private List<Text> texts;
    private List<Video> videos;

    .....with getter and setter

}

我需要从数据库中获取数据并将行数据拆分到这些列表中。拆分行基于检查行数据中的一个字段数据。 像..

Test test=new Test();
for(Row dataRow: rowDetails){
        if(dataRow.getSubType().equalsIgnoreCase("image")){
                        if(test.getImages()!=null){
                            List images=test.getImages();
                            Image image=new Image();
                            image.setUrl(dataRow.getURL());
                            images.add(image);
                            test.setImages(images);
                        }else{
                            List images=new ArrayList<Image>();
                            Image image=new Image();
                            image.setUrl(dataRow.getURL());
                            images.add(image);
                            test.setImages(images);
                        }
        }else if(contentModal.getSubType().equalsIgnoreCase("video")){

        }else if(contentModal.getSubType().equalsIgnoreCase("text")){

        }
}

请建议我实现它的最佳方法。

1 个答案:

答案 0 :(得分:1)

由于您似乎不必修改或删除测试类中的列表,因此我建议您在这些变量的声明中初始化列表:

class Test{
private List<Image> images= new ArrayList<Image>();
private List<Text> texts= new ArrayList<Text>();
private List<Video> videos= new ArrayList<Video>();
.....with getter and setter
}

或者在构造函数本身中:

class Test{
    private List<Image> images;
    private List<Text> texts;
    private List<Video> videos;

    public Test(){
       this.images=new ArrayList<Image>();
       this.text=new ArrayList<Text>();
       this.video=new ArrayList<Video>();
    }
    .....with getter and setter

}

因此,如果您不必测试列表是否已创建,那么您的代码会更容易:

Test test=new Test();
for(Row dataRow: rowDetails){
    if(dataRow.getSubType().equalsIgnoreCase("image")){
         Image image=new Image();
         image.setUrl("some url taken from database");
         test.getImages().add(image);
    }else if(dataRow.getSubType().equalsIgnoreCase("video")){

    }else if(dataRow.getSubType().equalsIgnoreCase("text")){

    }
}

另外,我建议您修改Image,Text和Video类构造函数以接受对象所需的参数,从而简化代码:

Test test=new Test();
for(Row dataRow: rowDetails){
    if(dataRow.getSubType().equalsIgnoreCase("image")){
            test.getImages().add(new Image("some url taken from database"));
    }else if(dataRow.getSubType().equalsIgnoreCase("video")){

    }else if(dataRow.getSubType().equalsIgnoreCase("text")){

    }
  }

如果你想避免使用if和else块,这里最好的方法是使用一个开关块:

Test test=new Test();
for(Row dataRow: rowDetails){
    swich(dataRow.getSubType()){
    case "image":
        test.getImages().add(new Image("some url taken from database"));
        break;
    case "video":
        break;
    case "text":
        break;
    }

  }