【问题解决】解决多个不同类型List包含部分相同属性,过滤并返回一个新的List

反正你们也看不到,所以我说不说也不重要吧,嘿嘿。

public class WarnUtils {

    //风力判断阈值
    public List<GaleWarn> GaleWarning(List<Station> list){
        //按照风速排序
        Collections.sort(list, new Comparator<Station>() {
            @Override
            public int compare(Station o1, Station o2) {
                return o2.getWinMax().compareTo(o1.getWinMax());
            }
        });

        if (list.get(0).getWinMax() < 10.8){
            return null;
        }else {
            Double win;
            List<GaleWarn> galeWarns = new ArrayList<>();
            for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
                win = list.get(i).getWinMax();
                if (win < 10.8){
                    continue;
                }else if (win >= 10.8 && win <= 17.1){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL8).build());
                }else if (win >= 17.2 && win <= 24.4){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL9).build());
                }else if (win >= 24.5 && win <= 32.6){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL10).build());
                }else if (win >= 32.7 && win <= 36.9){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL11).build());
                }else if (win >= 37.0 && win <= 41.4){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL12).build());
                }else if (win >= 41.5 && win <= 46.1){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL13).build());
                }else if (win >= 46.2 && win <= 50.9){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL14).build());
                }else if (win >= 51.0 && win <= 56.0){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL15).build());
                }else if (win >= 56.1 && win <= 61.2){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL16).build());
                }else if (win >= 61.3 && win <= 69.3){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL17).build());
                }else if (win >69.3){
                    galeWarns.add(GaleWarn.builder().win(win).localDate(list.get(i).getLocalDate().substring(0,10)).level(WinLevel.LEVEL17).build());
                }
            }
            return galeWarns;
        }


    }

    //高温判断阈值
    public List<TempWarn> TempHotWarning(List<Station> list){
        Collections.sort(list, new Comparator<Station>() {
            @Override
            public int compare(Station o1, Station o2) {
                return o2.getTemMaxDay().compareTo(o1.getTemMaxDay());
            }
        });

        if (list.get(0).getTemMaxDay() < 37){
            return null;
        }else {
            List<TempWarn> tempHotWarns = new ArrayList<>();
            Double temp;
            for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
                temp = list.get(i).getTemMaxDay();
                if (temp >= 37){
                    tempHotWarns.add(TempWarn.builder().localDate(list.get(i).getLocalDate().substring(0,10)).temp(list.get(i).getTemMaxDay()).remark("高温").build());
                }else {
                    break;
                }
            }
            return tempHotWarns;
        }
    }

    //低寒判断阈值
    public List<TempWarn> TempColdWarning(List<Station> list){
        Collections.sort(list, new Comparator<Station>() {
            @Override
            public int compare(Station o1, Station o2) {
                return o1.getTemMinDay().compareTo(o2.getTemMinDay());
            }
        });

        if (list.get(0).getTemMinDay() > -10){
            return null;
        }else {
            List<TempWarn> tempColdWarns = new ArrayList<>();
            Double temp;
            for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
                if (list.get(i).getTemMinDay() <= -10){
                    tempColdWarns.add(TempWarn.builder().localDate(list.get(i).getLocalDate().substring(0,10)).temp(list.get(i).getTemMinDay()).remark("低寒").build());
                }else {
                    break;
                }
            }
            return tempColdWarns;
        }
    }

    //暴雨判定阈值in
    public List<RainWarn> RainWarning(List<Station> list){
        Collections.sort(list, new Comparator<Station>() {
            @Override
            public int compare(Station o1, Station o2) {
                return o2.getTotalPrecip().compareTo(o1.getTotalPrecip());
            }
        });

        if (list.get(0).getTotalPrecip() < 50){
            return null;
        }else {
            List<RainWarn> rainWarns = new ArrayList<>();
            Integer rain;
            for (int i = 0; i < (list.size() > 7 ? 7 : list.size()); i++) {
                rain = list.get(i).getTotalPrecip();
                if (list.get(i).getTotalPrecip() >= 50){
                    rainWarns.add(RainWarn.builder().localDate(list.get(i).getLocalDate().substring(0,10)).rainfall(rain).remark("暴雨").build());
                }else {
                    break;
                }
            }
            return rainWarns;
        }
    }

    //统计处理
    public String warnNotice(List<Station> list,String searchAddress){
        List<GaleWarn> galeWarns = GaleWarning(list);
        List<TempWarn> coldWarns = TempColdWarning(list);
        List<TempWarn> hotWarns = TempHotWarning(list);
        List<RainWarn> rainWarns = RainWarning(list);
        List<String> dateList = new ArrayList<>();
        boolean flogGale = false,flogCold = false,flogHot = false,flogRain = false;

        StringBuilder buffer = new StringBuilder();
        if (galeWarns != null && galeWarns.size() != 0){
            flogGale = true;
            for (int i = 0; i < galeWarns.size(); i++) {
                dateList.add(galeWarns.get(i).getLocalDate().substring(0,10));
            }
        }
        if (coldWarns != null && coldWarns.size() != 0){
            flogCold = true;
            for (int i = 0; i < coldWarns.size(); i++) {
                dateList.add(coldWarns.get(i).getLocalDate().substring(0,10));
            }
        }
        if (hotWarns != null && hotWarns.size() != 0){
            flogHot = true;
            for (int i = 0; i < hotWarns.size(); i++) {
                dateList.add(hotWarns.get(i).getLocalDate().substring(0,10));
            }
        }
        if (rainWarns != null && rainWarns.size() != 0){
            flogRain = true;
            for (int i = 0; i < rainWarns.size(); i++) {
                dateList.add(rainWarns.get(i).getLocalDate().substring(0,10));
            }
        }
        //时间去重
        List<String> distinctList = dateList.stream().distinct().collect(Collectors.toList());
        Collections.sort(distinctList, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });

        log.info("排序后的时间=============="+distinctList);

        AtomicInteger index = new AtomicInteger(0);
        for (int i = 0; i < distinctList.size(); i++) {
            buffer.append(distinctList.get(i)).append(",").append(searchAddress).append("出现");
            if (flogGale){
                int dateIndex = i;
                //查看是否存在当天记录
                boolean flog = galeWarns.stream().anyMatch(data -> {
                    return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                });
                if (flog){
                    galeWarns.stream().filter(data->{
                        index.getAndIncrement();
                        return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                    }).findFirst();
                    buffer.append("大风").append(",日极大风速为").append(galeWarns.get(index.decrementAndGet()).getWin()).append("m/s,").append(galeWarns.get(index.get()).getLevel().getRemark()).append("级别;");
                    index.set(0);
                }
            }
            if (flogCold){
                int dateIndex = i;
                //查看是否存在当天记录
                boolean flog = coldWarns.stream().anyMatch(data -> {
                    return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                });
                if (flog){
                    coldWarns.stream().filter(data->{
                        index.getAndIncrement();
                        return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                    }).findFirst();
                    buffer.append(coldWarns.get(index.decrementAndGet()).getRemark()).append(",最低气温为").append(coldWarns.get(index.get()).getTemp()).append("℃;");
                    index.set(0);
                }
            }
            if (flogHot){
                int dateIndex = i;
                //查看是否存在当天记录
                boolean flog = hotWarns.stream().anyMatch(data -> {
                    return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                });
                if (flog){
                    hotWarns.stream().filter(data->{
                        index.getAndIncrement();
                        log.info("当前时间:"+distinctList.get(dateIndex));
                        return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                    }).findFirst();
                    buffer.append(hotWarns.get(index.decrementAndGet()).getRemark()).append(",最高气温为").append(hotWarns.get(index.get()).getTemp()).append("℃;");
                    index.set(0);
                }
            }
            if (flogRain){
                int dateIndex = i;
                //查看是否存在当天记录
                boolean flog = rainWarns.stream().anyMatch(data -> {
                    return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                });
                if (flog){
                    rainWarns.stream().filter(data->{
                        index.getAndIncrement();
                        return data.getLocalDate().substring(0, 10).equals(distinctList.get(dateIndex));
                    }).findFirst();
                    buffer.append(rainWarns.get(index.decrementAndGet()).getRemark()).append(",最大降雨量为").append(rainWarns.get(index.get()).getRainfall()).append("mm");
                    index.set(0);
                }
            }
            String s = String.valueOf((buffer.charAt(buffer.length()-1)));
            if (s.equals(";")){
                buffer.deleteCharAt(buffer.length()-1);
            }
            buffer.append("。");
        }
        return (buffer.length() == 0)?"无":buffer.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值