做網(wǎng)站 對(duì)方傳銷企拓客app騙局
在給定的包含時(shí)間戳的list中,查找連續(xù)continueNum次的且時(shí)間間隔為needDiff的集合。
eg:相鄰兩個(gè)數(shù)據(jù)的時(shí)間戳間隔為1分鐘,且超過(guò)30分鐘有數(shù)據(jù)
/**** @param list 包含時(shí)間戳(10位)的list* @param continueNum 至少持續(xù)的數(shù)量* @param needDiff 相鄰數(shù)據(jù)的間隔,單位:s* @return*/public static List<List<TmpBean>> queryContinueList(List<TmpBean> list,int continueNum,long needDiff) {List<List<TmpBean>> result = new ArrayList<>();List<Long> timestamps = list.stream().map(x -> x.getPublishtime()).collect(Collectors.toList());list.sort((x1,x2)->x1.getPublishtime().compareTo(x2.getPublishtime()));if (timestamps.size() < continueNum) {return null; }timestamps.sort(Long::compareTo); // 按照時(shí)間戳升序排序List<List<Long>> hisList = new ArrayList<>();long startTime = timestamps.get(0);for (int i = 1; i < timestamps.size(); i++) {long trueTime = startTime + needDiff * i;long realTime = timestamps.get(i);if (trueTime == realTime) {continue;} else {List<TmpBean> delBeans = new ArrayList<>(list.subList(0, i + 1));result.add(delBeans);list.removeAll(delBeans);List<Long> delTimes = new ArrayList<>(timestamps.subList(0, i + 1));//左閉右開(kāi)hisList.add(delTimes);timestamps.removeAll(delTimes);int nowSize = timestamps.size();if (nowSize < continueNum) {List<TmpBean> delLastBean = new ArrayList<>(list.subList(0,nowSize));result.add(delLastBean);break;} else {startTime = timestamps.get(0);}i = 0;}}List<List<TmpBean>> lists = result.stream().filter(lis -> lis.size() >= continueNum).collect(Collectors.toList());return lists;}public static void main(String[] args) {//調(diào)用此方法,可以找到list中所有相鄰時(shí)間為60s且連續(xù)次數(shù)>=30的目標(biāo)listqueryContinueList(list,30,60);}