我有两个列表对象,我希望将它们组合起来,这是我的类
public class DailyIncome {
private String date;
private String total;
}
我有两个列表,这是列表A
这是列表B
和我的期望结果是这样的
有可能实现我的期望吗?
答案 0 :(得分:2)
"有可能实现我的期望吗?"
是的,确实如此。但是,在你提出问题之前,你最好记下你迄今为止所尝试的内容。
1,您的DailyIncome
没有Getter和Setter,字段用private
修饰。您如何期望从其他班级访问它?
2,对于您的方案,我认为应该使用Map
。
请尝试以下代码供您参考。
public class DailyIncome {
public String date;
public String total;
public DailyIncome(String date, String total){
this.date = date;
this.total = total;
}
}
还有Test
类。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Test {
private List<DailyIncome> shopA = new ArrayList<DailyIncome>();
private List<DailyIncome> shopB = new ArrayList<DailyIncome>();
private List<List<String>> shop = new ArrayList<List<String>>();
public void initialize(){
shopA.add(new DailyIncome("20-08-16", "4"));
shopA.add(new DailyIncome("21-08-16", "8"));
shopA.add(new DailyIncome("23-08-16", "3"));
shopB.add(new DailyIncome("20-08-16", "6"));
shopB.add(new DailyIncome("21-08-16", "7"));
shopB.add(new DailyIncome("22-08-16", "8"));
}
public void calculate(){
Map<String, String> mapA = new HashMap<String, String>();
Map<String, String> mapB = new HashMap<String, String>();
for(DailyIncome income: shopA){
mapA.put(income.date, income.total);
}
for(DailyIncome income: shopB){
mapB.put(income.date, income.total);
}
Set<String> keySet = new HashSet<String>();
keySet.addAll(mapA.keySet());
keySet.addAll(mapB.keySet());
Object keyArr[] = keySet.toArray();
for(int i = 0; i < keyArr.length; i++){
String key = (String)keyArr[i];
String totalA = mapA.containsKey(key) ? mapA.get(key):"0";
String totalB = mapB.containsKey(key) ? mapB.get(key):"0";
List<String> itemList = new ArrayList<String>();
itemList.add(key);
itemList.add(totalA);
itemList.add(totalB);
shop.add(itemList);
}
/*
* print
*/
for(List<String> itemList: shop){
System.out.print(itemList.get(0) + " ");
System.out.print(itemList.get(1) + " ");
System.out.print(itemList.get(2));
System.out.println();
}
}
public static void main(String args[]){
Test obj = new Test();
obj.initialize();
obj.calculate();
}
}
答案 1 :(得分:1)
正如@Tibrogargan所说,如果您没有将数据存储为类,而是将其作为地图存储,那么将它们组合在一起会更容易。这是因为Java会自动将数据作为日期列表读取,然后与多个整数(收入)相关联。我已经多次这样做了,并且已经发现,对于你的&#34;问题&#34;,通过这种方式而不是你第一次呈现的方式更容易做到你想做的事情。 / p>
但是,你应该有这样的地图:
Map<Date, HashMap<ListId, Long>>
因为你可以存储每个列表的收入,然后如果得到一个&#34; get(ListId)&#34;返回null,你知道该列表不会有任何收入。
希望这会有所帮助。 Sneling。
答案 2 :(得分:-1)
我喜欢以上两种解决方案!我认为如果你使用java(通过查看DailyIncome的提供示例)也可以这样做:
请尝试这样做:您只需创建DailyIncome列表而不是Integer。 Collection id = Arrays.asList(2316,2317,2318); Collection existingId = Arrays.asList(1004,1762,1892,1342,1942,2316);
Collection<Integer> similar = new HashSet<Integer>( id );
similar.addAll( existingId );
System.out.println("Similar:"+similar);