java8 lambda小试牛刀,利用Stream把list转map,并将两个list的数据对象合并起来
2017-09-19 15:02
405 查看
java8 lambda小试牛刀,利用Stream把list转map,并将两个list的数据对象合并起来
[java] view
plain copy
public static void main(String[] args) {
// 集合1
List<SkillUpgrade> lists = new ArrayList<>();
SkillUpgrade s = new SkillUpgrade();
s.setLv(1);
s.setAppearNum(100);
lists.add(s);
SkillUpgrade s2 = new SkillUpgrade();
s2.setLv(2);
s2.setAppearNum(200);
lists.add(s2);
// 集合1
List<SkillUpgrade> listx = new ArrayList<>();
SkillUpgrade x = new SkillUpgrade();
x.setLv(1);
x.setSelectNum(1100);
listx.add(x);
SkillUpgrade x2 = new SkillUpgrade();
x2.setLv(2);
x2.setSelectNum(1200);
listx.add(x2);
// 把list转map,{k=lv,vaule=并为自身} . SkillUpgrade->SkillUpgrade或Function.identity()
Map<Integer, SkillUpgrade> map = listx.stream()
.collect(Collectors.toMap(SkillUpgrade::getLv, SkillUpgrade -> SkillUpgrade));
System.out.println("map:="+map);
// 合并
lists.forEach(n -> {
// 如果等级一致
if (map.containsKey(n.getLv())) {
SkillUpgrade obj = map.get(n.getLv());
// 把数量复制过去
n.setSelectNum(obj.getSelectNum());
}
});
System.out.println("lists:="+lists);
// 重复问题
Map<Integer, SkillUpgrade> keyRedo = listx.stream()
.collect(Collectors.toMap(SkillUpgrade::getLv, Function.identity(), (key1, key2) -> key2));
// 方式二:指定实例的map
Map<Integer, SkillUpgrade> linkedHashMap = listx.stream().collect(Collectors.toMap(SkillUpgrade::getLv,
SkillUpgrade -> SkillUpgrade, (key1, key2) -> key2, LinkedHashMap::new));
}
/**
* output:map:={1=SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=null], 2=SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=null]}
* lists:=[SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=100], SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=200]]
*/
输出结果:
map:={1=SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=null], 2=SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=null]}
lists:=[SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=100], SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=200]]
[java] view
plain copy
public static void main(String[] args) {
// 集合1
List<SkillUpgrade> lists = new ArrayList<>();
SkillUpgrade s = new SkillUpgrade();
s.setLv(1);
s.setAppearNum(100);
lists.add(s);
SkillUpgrade s2 = new SkillUpgrade();
s2.setLv(2);
s2.setAppearNum(200);
lists.add(s2);
// 集合1
List<SkillUpgrade> listx = new ArrayList<>();
SkillUpgrade x = new SkillUpgrade();
x.setLv(1);
x.setSelectNum(1100);
listx.add(x);
SkillUpgrade x2 = new SkillUpgrade();
x2.setLv(2);
x2.setSelectNum(1200);
listx.add(x2);
// 把list转map,{k=lv,vaule=并为自身} . SkillUpgrade->SkillUpgrade或Function.identity()
Map<Integer, SkillUpgrade> map = listx.stream()
.collect(Collectors.toMap(SkillUpgrade::getLv, SkillUpgrade -> SkillUpgrade));
System.out.println("map:="+map);
// 合并
lists.forEach(n -> {
// 如果等级一致
if (map.containsKey(n.getLv())) {
SkillUpgrade obj = map.get(n.getLv());
// 把数量复制过去
n.setSelectNum(obj.getSelectNum());
}
});
System.out.println("lists:="+lists);
// 重复问题
Map<Integer, SkillUpgrade> keyRedo = listx.stream()
.collect(Collectors.toMap(SkillUpgrade::getLv, Function.identity(), (key1, key2) -> key2));
// 方式二:指定实例的map
Map<Integer, SkillUpgrade> linkedHashMap = listx.stream().collect(Collectors.toMap(SkillUpgrade::getLv,
SkillUpgrade -> SkillUpgrade, (key1, key2) -> key2, LinkedHashMap::new));
}
/**
* output:map:={1=SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=null], 2=SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=null]}
* lists:=[SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=100], SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=200]]
*/
输出结果:
map:={1=SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=null], 2=SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=null]}
lists:=[SkillUpgrade [skillId=null, skillName=null, lv=1, persNum=null, selectNum=1100, appearNum=100], SkillUpgrade [skillId=null, skillName=null, lv=2, persNum=null, selectNum=1200, appearNum=200]]
相关文章推荐
- java8 lambda小试牛刀,利用Stream把list转map,并将两个list的数据对象合并起来
- java方式的将java对象以及list或者map转化为json数据 .
- Android JSON数据格式的解析,与简单对象、带泛型的List和Map的转换,以及GSON的使用
- 【第15篇】通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题(一)
- java 利用反射 从数据库取出数据对象list 类似hibernate
- For循环,这里的listMap必须在for循环之前new一下(循环外面new ArrayList对象),不然每次循环加入到list中,下次循环就把上次的数据清空了,最后存到list中是最后一条数据。
- List<Map<String, String>>遍历相同数据合并(map里面某个key相同则合并数据)
- List、Set、Map判断两个对象相等的标准
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题.
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题(二)
- Android 使用SharedPreferences保存各种数据(List,Map,对象等)+ SpUtils工具
- 通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- 利用fastjson将map数据封装到对象中
- 将List<Map<String,String>型的数据,变成一个JSON对象。
- springMVC对简单对象,Set,List,Map的数据绑定及类型转换
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题
- springMVC对简单对象、Set、List、Map的数据绑定和常见问题(三)
- Clojure:将两个list合并成一个map
- java方式的将java对象以及list或者map转化为json数据,json转换为object或者map