java取某段/某个时间段的值的方法
直接上代码
测试类
publicclassTestData{ publicstaticvoidmain(String[]args){ Listlist=newArrayList<>(); list.add(newTsData("11","08",11111l)); list.add(newTsData("11","080405",22222l)); list.add(newTsData("11","09070802",33333l)); list.add(newTsData("11","09234567",44444l)); list.add(newTsData("11","9867342",55555l)); list.add(newTsData("11","08607342",55555l)); list.add(newTsData("11","08607342",555556l)); list.add(newTsData("11","dad8607342",5555567l)); System.out.println(doCalculateActionTime(list,"08")+"uiui"); } publicstaticList doCalculateActionTime(List tsData,Stringaction){ //step1:按照两位一个分解动作代码 //step2:找到动作代码总包含action代码的时间,找到第一次出现的时间和最后一次出现的时间 List actionTime=newArrayList<>(); if(CollectionUtils.isEmpty(tsData)){ returnactionTime; } //是不是第一次出现 booleanisFirst=true; //是不是已经出现过 booleanisAppear=false; ActionTimerecord=newActionTime(); for(TsDatadata:tsData){ if(null==data.getTimestamp()||StringUtils.isEmpty(data.getValue())){ continue; } List actions=ProjectStringUtil.getStrList(data.getValue(),2); System.out.println(actions+"actions"); //第一次出现,则记录时间,最后一次出现也记录时间 if(actions.contains(action)){ if(isFirst){ //记录开始时间 record=newActionTime(); record.setStartTime(data.getTimestamp()); //设置标志位 isFirst=false; isAppear=true; } }else{ //判断前面是否已经出现过action if(isAppear){ //记录结束时间 record.setEndTime(data.getTimestamp()); actionTime.add(record); //重置标志位 isAppear=false; isFirst=true; } } } returnactionTime; } }
实体类
@Data @AllArgsConstructor @NoArgsConstructor publicclassTsData{ privateStringlabel; privateStringvalue; privateLongtimestamp; }
工具类
publicclassProjectStringUtil{ /** *把原始字符串分割成指定长度的字符串列表 * *@paraminputString原始字符串 *@paramlength指定长度 *@return */ /** *把原始字符串分割成指定长度的字符串列表 * *@paraminputString原始字符串 *@paramlength指定长度 *@paramsize指定列表大小 */ publicstaticListgetStrList(StringinputString,intlength,intsize){ List list=newArrayList (); for(intindex=0;index str.length()){ returnnull; } if(t>str.length()){ returnstr.substring(f); }else{ returnstr.substring(f,t); } } publicstaticList getStrList(StringinputString,intlength){ intsize=inputString.length()/length; if(inputString.length()%length!=0){ size+=1; } returngetStrList(inputString,length,size); } }
测试类改进
@Override publicListdoCalculateActionTime(List tsData,Stringaction){ //step1:按照两位一个分解动作代码 //step2:找到动作代码总包含action代码的时间,找到第一次出现的时间和最后一次出现的时间 List actionTime=newArrayList<>(); if(CollectionUtils.isEmpty(tsData)){ returnactionTime; } //去重 tsData=tsData.stream().collect( Collectors.collectingAndThen(Collectors.toCollection(()->newTreeSet<>(Comparator.comparing(TsData::getTimestamp))), ArrayList::new)); //排序 tsData=tsData.stream().sorted(Comparator.comparing(TsData::getTimestamp)).collect(Collectors.toList()); //是不是第一次出现 booleanisFirst=true; //是不是已经出现过 booleanisAppear=false; ActionTimerecord=newActionTime(); for(TsDatadata:tsData){ if(null==data.getTimestamp()||StringUtils.isEmpty(data.getValue())){ continue; } List actions=ProjectStringUtil.getStrList(data.getValue(),2); //第一次出现,则记录时间,最后一次出现也记录时间 if(actions.contains(action)){ if(isFirst){ //记录开始时间 record=newActionTime(); record.setStartTime(data.getTimestamp()); //设置标志位 isFirst=false; isAppear=true; } }else{ //判断前面是否已经出现过action if(isAppear){ //记录结束时间 record.setEndTime(data.getTimestamp()); actionTime.add(record); //重置标志位 isAppear=false; isFirst=true; } } } returnactionTime; }
到此这篇关于java取某段/某个时间段的值的方法的文章就介绍到这了,更多相关java取某段/某个时间段值内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!