H5W3
当前位置:H5W3 > 其他技术问题 > 正文

请教一个算法问题

有一个集合,存了三个年份:

List<String> str = new ArrayList<>();
str.add("2016");
str.add("2017");
str.add("2018");

有另一个集合:

class Bean {
    private String year;
    private String cnt;
    //  get set.....
}

List<String> str2 = new ArrayList<>();
str2.add(Bean); // bean的year为2016 cnt为100
str2.add(Bean);// bean的year为2017  cnt为150

第三个集合:

List<String> str3 = new ArrayList<>();

现在要求拿str2去对比str1,如果str2的Bean已经存在str1中年份的则插入str3,如果不存在则想str3插入这个不存在的年份,cnt为0,最终str3的数据应该是:

// bean的year为2016 cnt为100
// bean的year为2017 cnt为100
// bean的year为2018 cnt为0

不知道有没有描述清楚,思考了很久,是在是不知道怎么写了、总是str3有重复数据。

回答:

    List<String> str1 = new ArrayList<>();

    str1.add("2016");
    str1.add("2017");
    str1.add("2018");

    List<Bean> str2 = new ArrayList<>();
    str2.add(new Bean("2016", "100"));
    str2.add(new Bean("2017", "150"));

    List<String> str3 = new ArrayList<>();

    List<String> temp = new ArrayList<>();

    str2.stream().forEach(bean -> {
        temp.add(bean.getYear());
    });

    str1.stream().forEach(str -> {
        if(temp.contains(str)){
            str3.add(str2.get(temp.indexOf(str)).toString());
        }else{
            str3.add(new Bean(str,"0").toString());
        }
    });

    System.out.println(str3.toString());

回答:

贴出来的代码泛型都有问题,希望对你有用

import java.util.ArrayList;
import java.util.List;

public class Answer {
    public static void main(String[] args) {
        List<String> str = new ArrayList<>();
        str.add("2016");
        str.add("2017");
        str.add("2018");
        List<Bean> str2 = new ArrayList<>();
        // bean的year为2016 cnt为100
        str2.add(new Bean("2016","100"));
        // bean的year为2017  cnt为150
        str2.add(new Bean("2017","150"));
        List<Bean> str3 = new ArrayList<>();
        deal(str, str2, str3);
        System.out.println(str3);
    }

    private static void deal(List<String> str, List<Bean> str2, List<Bean> str3) {
        //存储交集
        List<String> years = new ArrayList<>();
        for (Bean temp : str2) {
            if (str.contains(temp.getYear())) {
                years.add(temp.getYear());
                str3.add(temp);
            } else {
                temp.setCnt("0");
                str3.add(temp);
            }
        }
        for (String s : str) {
            if (!years.contains(s)) {
                str3.add(new Bean(s, "0"));
            }
        }
    }
}
class Bean {
    private String year;
    private String cnt;

    public Bean() {
    }

    public Bean(String year, String cnt) {
        this.year = year;
        this.cnt = cnt;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("Bean{");
        sb.append("year='").append(year).append('\'');
        sb.append(", cnt='").append(cnt).append('\'');
        sb.append('}');
        return sb.toString();
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getCnt() {
        return cnt;
    }

    public void setCnt(String cnt) {
        this.cnt = cnt;
    }
}

本文地址:H5W3 » 请教一个算法问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址