java 对象属性转list_Java8 实现stream将对象集合list中抽取属性集合转化为map或list...

首先新建一个实体类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;

}

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持萬仟网。如有错误或未考虑完全的地方,望不吝赐教。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值