首先新建一个实体类person
@data
public class person {
/** 编码 */
private string code;
/** 名字 */
private string name;
public person(string code, string name) {
this.code = code;
this.name = name;
}
}
实例化三个对象放入list集合中
public static void main(string[] args) {
person person1 = new person("001", "张三");
person person2 = new person("002", "李四");
person person3 = new person("002", "王五");
list personlist = new arraylist<>();
personlist.add(person1);
personlist.add(person2);
personlist.add(person3);
personlist.foreach(t -> system.out.println(t.tostring()));
}
输出结果为:
person(code=001, name=张三)
person(code=002, name=李四)
person(code=002, name=王五)
1.抽取对象的code作为key,name作为value转化为map集合
方法为
private static hashmap listtomap(list personlist) {
return (hashmap)personlist.stream()
.filter(t -> t.getname()!=null)
.collect(collectors.tomap(person::getcode,person::getname,(k1,k2)->k2));
}
filter() 方法作用是过滤掉名字为空的对象,当对象的名字为null时,会出现npe空指针异常
(k1,k2)->k2 意思是遇到相同的key时取第二个值
(k1,k2)->k1 意思是遇到相同的key时取第一个值
调用这个方法
hashmap personmap = listtomap(personlist);
personmap.foreach((k,v)-> system.out.println(k.tostring() + " - " + v.tostring()));
输出结果为:
001 - 张三
002 - 王五
2.抽取对象的name得到name的list集合
方法为
private static list getnamelist(list personlist) {
return personlist.stream().map(person::getname).collect(collectors.tolist());
}
调用这个方法
list namelist = getnamelist(personlist);
namelist.foreach(t -> system.out.println(t.tostring()));
输出结果为:
张三
李四
王五
补充:java8 使用stream将list转成map,或者从list对象中获取单个属性list,list中根据某个字段排序
1.学生类
import lombok.data;
@data
public class student{
private string stuid;
private string name;
private string age;
private string sex;
}
2.测试类
public class test {
public static void main(string[] args) {
// 创建学生list
list list = createstudentlist();
// 1.获取value为student对象,key为学生id的map
getstudentobjectmap(list);
// 2.获取value为学生姓名,key为学生id的map
getstudentnamemap(list);
// 3.获取学生姓名list
getstudentnamelist(list);
//4.list中删除学生id = 1的对象
list.removeif(student -> student.getstuid().equals(1));
//5.如果studentid为long类型如何转?
map mapstr = list.stream().collect(collectors.tomap(student -> student.getstuid().tostring(), student -> json.tojsonstring(student)));
//6.根据list中student的学生姓名排序
collections.sort(list, (o1, o2) -> {
if (o1.getname().compareto(o2.getname()) > 0) {
return 1;
} else if (o1.getname().compareto(o2.getname()) < 0) {
return -1;
} else {
return 0;
}
});
//7.list遍历
list liststr = new arraylist<>();
list liststu = new arraylist<>();
liststr.foreach(studentstr -> {
liststu.add(json.parseobject(studentstr, student.class));
});
//list根据某个字段过滤、排序
liststu.stream()
.filter(student -> student.getsex().equals("女"))
.sorted(comparator.comparing(student::getname))
.collect(collectors.tolist());
//list根据某个字段分组
map> sexgroupmap = liststu.stream()
.collect(collectors.groupingby(student::getsex));
//如果map中多个名称相同,则studentid用逗号间隔
map studentnameidmap = liststu.stream()
.collect(tomap(student::getname,student::getstuid,(s,a)->s+","+a));
}
public static list createstudentlist() {
list list = new arraylist();
student lily = new student();
lily.setstuid("1");
lily.setname("lily");
lily.setage("14");
lily.setsex("女");
student xiaoming = new student();
xiaoming.setstuid("2");
xiaoming.setname("xiaoming");
xiaoming.setage("15");
xiaoming.setsex("男");
list.add(lily);
list.add(xiaoming);
return list;
}
public static map getstudentobjectmap(list list) {
map map = list.stream().collect(collectors.tomap(student::getstuid, student -> student));
map.foreach((key, value) -> {
system.out.println("key:" + key + ",value:" + value);
});
return map;
}
public static map getstudentnamemap(list list) {
map map = list.stream().collect(collectors.tomap(student::getstuid, student::getname));
map.foreach((key, value) -> {
system.out.println("key:" + key + ",value:" + value);
});
return map;
}
public static list getstudentnamelist(list list) {
list result = list.stream().map(student -> student.getname()).collect(collectors.tolist());
for (string name : result) {
system.out.println("name:" + name);
}
return result;
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持萬仟网。如有错误或未考虑完全的地方,望不吝赐教。
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!