如何将两个Java Arraylist值设置为一个Java对象?

问题描述:

我在使用java ArrayList时遇到问题。这里是简要说明:如何将两个Java Arraylist值设置为一个Java对象?

  1. 通过进行网络服务调用,我将获得大约900+的所有视频作为Java对象。这些Java对象缺少一些必需的信息。所以我通过传递视频ID再次拨打另一个网络服务。这也返回Java对象。

  2. 我存储所述第一web服务调用的值和所述第二web服务调用的值分成两个不同的Java的ArrayList如下:

    列表medialist中=新的ArrayList(); List mediaVOs = new ArrayList();

  3. 最后我写了一个方法,通过传递两个列表并将这些值设置为一个java对象。这应该返回942附近的总物体。但是这会返回一些奇数887364而不是942。

请帮我解决问题。下面是代码:

 client = getClient(); 
     if (client != null) { 
      List<MediaEntry> mediaList = getAllMedia(); 
      if (mediaList.size() >= 1) { 
       System.out.println("Total Media ------>" + mediaList.size()); 
       MetadataListResponse metadataListResponse = null; 
       Media mediaVO = null; 
       List<List<String>> metadataValues = new ArrayList<List<String>>(); 
       List<String> categoriesList = new ArrayList<String>(); 
       List<String> accountNamesList = new ArrayList<String>(); 
       List<String> ownerNamesList = new ArrayList<String>(); 
       List<String> countryList = new ArrayList<String>(); 
       List<String> languageList = new ArrayList<String>(); 
       for(MediaEntry entry:mediaList) { 
        if(entry != null) { 
         metadataListResponse = getMetadata(entry.id); 
         if (metadataListResponse.totalCount >= 1) { 
          mediaVO = new Media(); 
          List<Metadata> metadataObjs = metadataListResponse.objects; 
          if (metadataObjs != null 
            && metadataObjs.size() > 0) { 
           for (int i = 0; i < metadataObjs.size(); i++) { 
            Metadata metadata = metadataObjs 
              .get(i); 
            if (metadata != null) { 
             if (metadata.xml != null) { 
              metadataValues = parseXml(metadata.xml); 
              if (metadataValues.size() != 0) { 
               categoriesList = metadataValues 
                 .get(0); 
               accountNamesList = metadataValues.get(1); 
               ownerNamesList = metadataValues.get(2); 
               countryList = metadataValues.get(3); 
               languageList = metadataValues.get(4); 

               if (categoriesList.size() == 1) { 
                for (String categoryName : categoriesList) { 
                 //System.out 
                 //.println("categoryName"+categoryName); 
                 mediaVO.setCategories(categoryName); 
                } 
               } 
               if (accountNamesList.size() == 1) { 

                for (String accountName : accountNamesList) { 
                 //System.out 
                 //.println("accountName"+accountName); 
                 mediaVO.setAccountName(accountName); 
                } 
               } 
               if (ownerNamesList.size() == 1) { 

                for (String ownerName : ownerNamesList) { 
                 //System.out 
                 //.println("ownerName"+ownerName); 
                 mediaVO.setOwnerName(ownerName); 
                } 
               } 
               if (countryList.size() == 1) { 
                for (String country : countryList) { 
                 //System.out 
                 //.println("country"+country); 
                 mediaVO.setCountry(country); 
                } 
               } 
               if (languageList.size() == 1) { 
                for (String language : languageList) { 
                 //System.out 
                 //.println("language"+language); 
                 mediaVO.setLanguage(language); 
                } 
               } 
              } 
             } 
            } 
           } 

          } 
         } 
         mediaVOs.add(mediaVO); 
        } 
       } 

       System.out.println("mediaVOs.size()------>"+mediaVOs.size()); 
       List<Media> medias = setMediaVO(mediaList, mediaVOs); 
       if(medias.size() >= 1) { 
        System.out.println("Final medias size ------>"+medias.size()); 
        mediaXml = convertToXml(medias); 
        System.out.println("Final Media XML converted ------->"+mediaXml); 
        Document doc = convertStrToDoc(mediaXml); 
       } 
      } 
     } 


private List<Media> setMediaVO(List<MediaEntry> mediaList,List<Media> mediaList1) { 
    if(mediaList.size() >= 1) { 
     if(mediaList1.size() >= 1) { 
      for(MediaEntry media:mediaList) { 
       for(Media media1:mediaList1) { 
        Media mediaVO = new Media(); 
        MediaType mediaType = media.mediaType; 
        mediaVO.setMediaId(media.id); 
        mediaVO.setMediaName(media.name); 
        mediaVO.setMediaDesc(media.description); 
        mediaVO.setCreatedDate(media.createdAt); 
        mediaVO.setCreditUserName(media.creditUserName); 
        mediaVO.setDataUrl(media.dataUrl); 
        mediaVO.setDownloadUrl(media.dataUrl); 
        mediaVO.setDuration(media.duration); 
        mediaVO.setEndDate(media.endDate); 
        mediaVO.setEntitledUsersEdit(media.entitledUsersEdit); 
        mediaVO.setEntitledUsersPublish(media.entitledUsersPublish); 
        mediaVO.setLastPlayedAt(media.lastPlayedAt); 
        mediaVO.setMediaType(mediaType.toString()); 
        mediaVO.setUpdatedDate(media.updatedAt); 
        mediaVO.setPlays(media.plays); 
        mediaVO.setViews(media.views); 
        mediaVO.setCategories(media1.getCategories()); 
        mediaVO.setAccountName(media1.getAccountName()); 
        mediaVO.setOwnerName(media1.getOwnerName()); 
        mediaVO.setCountry(media1.getCountry()); 
        mediaVO.setLanguage(media1.getLanguage()); 
        medias.add(mediaVO); 
       } 
      } 
     } 
    } 

    return medias; 
} 

感谢, 的Raji

+4

887364并不奇怪,它是942²:这意味着你有一个太多的循环水平 – Aaron

+3

欢迎来到Stack Overflow。不幸的是,你所包含的代码太多(很多不相关的代码),太少(这是不完整的 - 我们不能使用它重现任何东西)。请提供[mcve]给我们帮助。请注意,它不需要进行任何Web服务调用。我猜*你应该通过ID匹配两个列表中的条目,而目前你正在生成交叉连接... –

+0

也许你会更好,如果你使用的是Map '。 – SomeJavaGuy

你的问题是在这里:

for(MediaEntry media:mediaList) { 
      for(Media media1:mediaList1) { 

对于每个MediaEntry,你在每个媒体循环,这意味着你将执行代码内942 * 942次,而你想要的是执行它942次。您必须将MediaEntries与Media匹配并执行一次代码。

让我试着以每个人都明白我的意思的方式来解释这个问题。

问题的确是你自己乘以942的事实。 这发生在下面的代码的原因:

private List<Media> setMediaVO(List<MediaEntry> mediaList,List<Media> mediaList1) { 
    if(mediaList.size() >= 1) { 
     if(mediaList1.size() >= 1) { 
      for(MediaEntry media:mediaList) { 
       for(Media media1:mediaList1) { 
        //Do stuff 
       } 
      } 
     } 
    } 
    return medias; 
} 

在这里,你虽然环1 medialist中在medialist中每个项目,做的东西吧。 在此代码的末尾,您可以将medialist 1中找到的每个条目添加到另一个列表中,但第一个列表中的每个条目会发生942次。 由于该列表有942项,所以您会得到887.364的“奇数”数字。