如何将两个Java Arraylist值设置为一个Java对象?
问题描述:
我在使用java ArrayList时遇到问题。这里是简要说明:如何将两个Java Arraylist值设置为一个Java对象?
通过进行网络服务调用,我将获得大约900+的所有视频作为Java对象。这些Java对象缺少一些必需的信息。所以我通过传递视频ID再次拨打另一个网络服务。这也返回Java对象。
-
我存储所述第一web服务调用的值和所述第二web服务调用的值分成两个不同的Java的ArrayList如下:
列表medialist中=新的ArrayList(); List mediaVOs = new ArrayList();
最后我写了一个方法,通过传递两个列表并将这些值设置为一个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
答
你的问题是在这里:
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的“奇数”数字。
887364并不奇怪,它是942²:这意味着你有一个太多的循环水平 – Aaron
欢迎来到Stack Overflow。不幸的是,你所包含的代码太多(很多不相关的代码),太少(这是不完整的 - 我们不能使用它重现任何东西)。请提供[mcve]给我们帮助。请注意,它不需要进行任何Web服务调用。我猜*你应该通过ID匹配两个列表中的条目,而目前你正在生成交叉连接... –
也许你会更好,如果你使用的是Map'。 –
SomeJavaGuy