如何组合列表对象java?

时间:2016-09-04 01:48:46

标签: java list object

我有两个列表对象,我希望将它们组合起来,这是我的类

public class DailyIncome {

    private String date;
    private String total;

}

我有两个列表,这是列表A

enter image description here

这是列表B

enter image description here

和我的期望结果是这样的

enter image description here

有可能实现我的期望吗?

3 个答案:

答案 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);