Java 两个list数据根据某个字段合并

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16064871/article/details/83032454

之前遇到一个需求,字段是每小时那种(2018101208)。然后服务给我数据少了部分。然后我需要自已推算。然后补上没有那些小时为单位的数据。这里面也涉及到了自已设计出来数据list是全面的。所有的小时都有。然后把服务器获取list根据这个进行对比,补上服务器没有的小时数。两个list根据某个字段进行合并。

1、获取过去15天的小时

初始化变量

    public String start_ts = "1537812000000";
    //解析出来历史数据
    private List<HistoryData> historyDataList = new ArrayList<>();
    //自已推算的历史数据
    private List<String> calculateDataList = new ArrayList<>();

获取系统当前时间,推算15天前这个时间,然后把每小时存在List<String>里面。这也是一个小小的算法。

    public void SetContext(Context context) {
        if (mContext != null) mContext.clear();
        mContext = new WeakReference<Context>(context);

        long time = System.currentTimeMillis();

        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHH");
        String strNow = df.format(time);

        time = dateConvertMillionSec(strNow);
        //获取当前时间,减去24小时。就是获取过去一天每小时的数据
        long tempTime = 1000 * 60 * 60 * 24 * 15L;

        start_ts = String.valueOf(time - tempTime);

        for (int j = 1; j < 15; j++) {
            for (int i = 1; i < 25; i++) {
                calculateDataList.add(df.format(time - 1000 * 60 * 60 * j * i));
            }
        }
    }

    private long dateConvertMillionSec(String str) {
        long millionSeconds = 0;
        try {
            millionSeconds = new SimpleDateFormat("yyyyMMddHH").parse(str).getTime();
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return millionSeconds;
    }

2、两个list根据时间字段合并

方法一,利用list里面带有contains方法进行字段比较。把找出来List<HistoryData> 里面没有数据;放到List<HistoryData> 里面HistoryData里面字段里面。

            for (String temp : calculateDataList) {
                if (!tempList.contains(temp)) {
                    HistoryData historyData = new HistoryData();
                    historyData.setDatetime(temp);
                    historyDataList.add(historyData);
                }
            }

方法二、两个for循环遍历也是可以搞定的。

            for (String temp : calculateDataList) {
                boolean flag = false;
                for (HistoryData historyData : historyDataList) {
                    if (temp.equals(historyData.getDatetime())) {
                        flag = true;
                        break;
                    }
                }

                if (!flag) {
                    HistoryData historyData = new HistoryData();
                    historyData.setDatetime(temp);
                    historyDataList.add(historyData);
                }
            }

3、最后附带一个list的排序方法,按时间排序

        Collections.sort(historyDataList, new Comparator<HistoryData>() {
            @Override
            public int compare(HistoryData temp1, HistoryData temp2) {
                //可以按User对象的其他属性排序,只要属性支持compareTo方法
                Integer it1 = Integer.valueOf(temp1.getDatetime());
                Integer it2 = Integer.valueOf(temp2.getDatetime());

                return it1.compareTo(it2);
            }
        });

猜你喜欢

转载自blog.csdn.net/qq_16064871/article/details/83032454
今日推荐