请教一个算法问题

来源:互联网  时间:2018/1/28 1:10:46

关于网友提出的“ 请教一个算法问题”问题疑问,本网通过在网上对“ 请教一个算法问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 请教一个算法问题
描述:

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

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

有另一个集合:

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

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

第三个集合:

List 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有重复数据。


解决方案1:

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

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

public class Answer {
    public static void main(String[] args) {
        List str = new ArrayList<>();
        str.add("2016");
        str.add("2017");
        str.add("2018");
        List 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 str3 = new ArrayList<>();
        deal(str, str2, str3);
        System.out.println(str3);
    }

    private static void deal(List str, List str2, List str3) {
        //存储交集
        List 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;
    }
}
解决方案2:

    List str1 = new ArrayList<>();

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

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

    List str3 = new ArrayList<>();

    List 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());

上一篇idea开发java,修改了xml或者配置文件之后,必须重启服务器吗?
下一篇如何读取configure文件下的sourceconf内容
明星图片
相关文章
《 请教一个算法问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)