使用Lambda表达式获取List对象中某一个属性以及获取特定条件下的属性对象
使用Lambda表达式需要jdk1.8以上的环境文章来源:https://www.toymoban.com/news/detail-616104.html
获取List对象中的某一个属性
如下所示文章来源地址https://www.toymoban.com/news/detail-616104.html
/**
* 使用lambda表达式对list对象进行操作
*/
public class ListOperate {
private String name;
private String sex;
private int age;
public ListOperate(String name, String sex,int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
List<ListOperate> listOperates = new ArrayList<>();
listOperates.add(new ListOperate("李四","女",18));
listOperates.add(new ListOperate("王五","男",6));
listOperates.add(new ListOperate("张三","男",12));
listOperates.add(new ListOperate("赵六","男",40));
//获取对象中name属性的值,并放入新的list集合中
List<String> nameList = listOperates.stream().map(ListOperate::getName).collect(Collectors.toList());
for (String s : nameList) {
System.out.println("姓名为:"+s);
}
//获取对象中age属性的值,并放入新的list集合中
List<Integer> ageList = listOperates.stream().map(ListOperate::getAge).collect(Collectors.toList());
for (Integer s : ageList) {
System.out.println("年龄为:"+s);
}
//获取list对象中姓名为张三的对象,如果对象中存在多个张三,取的是第一次出现的对象,可以理解为出现姓名为张三的对象呢,就会终止向下查找
//这样取值会有一个问题,如果没找到,就会报“ No value present ”异常,因此建议使用下面这种方式
ListOperate listOperate = listOperates.stream().filter(i -> i.getName().equals("张三")).findFirst().get();
System.out.println(listOperate.getName());
//使用这个方法可以避免未获取到对象时报“ No value present ”异常,或者想要捕获进行自定义异常处理可以使用下面的方法
Optional<ListOperate> optional = listOperates.stream().filter(i -> i.getName().equals("赵六1")).findFirst();
if (optional.isPresent()) {
ListOperate operate = optional.get();
System.out.println(operate.getName());
}else {
System.out.println("未找到对象");
}
//使用这种写法可以捕获自定义异常
ListOperate operate = listOperates.stream().filter(i -> i.getName().equals("赵六1"))
.findFirst().orElseThrow(() -> new RuntimeException("获取名字为赵六1的学生失败"));
System.out.println(operate.getName());
//获取list对象中性别为男的对象,放入新的map集合,已name为key,age为value存放
Map<String, Integer> mapStream = listOperates.stream().filter(i -> i.getSex().equals("男"))
.collect(Collectors.toMap(ListOperate::getName, ListOperate::getAge));
for (Map.Entry<String,Integer> map:mapStream.entrySet()){
System.out.println("姓名:"+map.getKey()+"年龄:"+map.getValue());
}
//获取list中性别为男的对象,放入新的list对象中
List<ListOperate> operateList = listOperates.stream().filter(i -> i.getSex().equals("男")).collect(Collectors.toList());
operateList.forEach(i-> System.out.println(i.getName() + ":" + i.getAge() + ":" + i.getSex()));
}
}
到了这里,关于使用Lambda获取List对象中某一个属性以及获取特定条件下的属性对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!