Java 兩個list資料根據某個欄位合併
阿新 • • 發佈:2018-12-15
之前遇到一個需求,欄位是每小時那種(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);
}
});