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

时间:2016-01-06 13:29:49

标签: java arraylist

使用java ArrayList时遇到问题。以下是简要说明:

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

  2. 我将第一个Web服务调用值和第二个Web服务调用值存储到两个不同的Java ArrayLists中,如下所示:

    列出mediaList = new ArrayList(); 列出mediaVOs = new ArrayList();

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

  4. 请帮我解决问题。这是代码:

            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

2 个答案:

答案 0 :(得分:0)

你的问题在这里:

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

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

答案 1 :(得分: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;
}

在这里,您可以为medialist中的每个项目循环使用medialist 1并使用它来完成任务。 在此代码的末尾,您将在medialist 1中找到的每个条目添加到另一个列表中,但在第一个列表中每个项目发生942次。 由于该列表中有942项,您可以获得&#34; odd&#34;数量为887.364。