关于网友提出的“ 请教一个算法问题”问题疑问,本网通过在网上对“ 请教一个算法问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 请教一个算法问题描述:
有一个集合,存了三个年份:
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());