2016-01-06 153 views
-2

我在使用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

回答

0

你的問題是在這裏:

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

對於每個MediaEntry,你在每個媒體循環,這意味着你將執行代碼內942 * 942次,而你想要的是執行它942次。您必須將MediaEntries與Media匹配並執行一次代碼。

0

讓我試着以每個人都明白我的意思的方式來解釋這個問題。

問題的確是你自己乘以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的「奇數」數字。

相關問題