Java攻略学习笔记3(构造方法引用1)
1.为了更好的理解下面的例子,需要先了解如何使用Stream类中的map(Function<? super T,? extends R> mapper)方法;它可以对流中的每个数据都执行相同的功能。
举个例子更好的理解map方法以及复习lambda表达式和方法引用(将一份人员列表转换为相应的姓名类表):
(1)创建Person类:
实例:
(1)使用lambda表达式(依旧使用上面例子的Person类):
//将人名字符串类表转换为Person引用类表
#笔记##Java#
举个例子更好的理解map方法以及复习lambda表达式和方法引用(将一份人员列表转换为相应的姓名类表):
(1)创建Person类:
package com.zxq;
public class Person { private String name;
public Person(){} public Person(String name) { super();
this.name = name;
}
public String getName() { return name;
}
public void setName(String name) { this.name = name;
}
}(2)创建PeopleList类,里面添加一个创建Person集合的方法:
package com.zxq;
import java.util.ArrayList;
import java.util.List;
public class PeopleList { public static List<Person> peopleList(String[] strArray){ //创建一个list集合
List<Person> list=new ArrayList<Person>();
//往集合中添加Person
for(int i=0;i<strArray.length;i++){ list.add(new Person(strArray[i]));
}
//把list结合作为结果返回
return list;
}
}(3)实现将人员列表转换为姓名类表的功能:
package com.zxq;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class PeopleTest { public static void main(String[] args){ //创建一个数组,存放要Person对象的信息
String strArray[]={"xiaoqiang","xiaohong","xiaohua"}; //获取装有Person的list集合
List<Person> people=PeopleList.peopleList(strArray);
//使用匿名内部类实现获取人名的功能,Function接口的子类可以作为map方法的子类进行传递,而方法apply是Function接口的唯一抽象方法
Function<Person,String> fun=new Function<Person,String>(){ @Override
public String apply(Person person) { return person.getName();
}
};
//将人员列表转换为姓名列表
List<String> names=people.stream().map(fun).collect(Collectors.toList());
//在控制台打印出名字列表
System.out.println(names);
}
}(4)用lambda表达式对(3)进行改写:
public static void main(String[] args){ //创建一个数组,存放要Person对象的信息
String strArray[]={"xiaoqiang","xiaohong","xiaohua"}; //获取装有Person的list集合
List<Person> people=PeopleList.peopleList(strArray);
//将人员列表转换为姓名列表
List<String> names=people.stream().map(person->person.getName()).collect(Collectors.toList());
//在控制台打印出名字列表
System.out.println(names);
}(5)用方法引用对(3)进行改写:
public static void main(String[] args){ //创建一个数组,存放要Person对象的信息
String strArray[]={"xiaoqiang","xiaohong","xiaohua"}; //获取装有Person的list集合
List<Person> people=PeopleList.peopleList(strArray);
//将人员列表转换为姓名列表
List<String> names=people.stream().map(Person::getName).collect(Collectors.toList());
//在控制台打印出名字列表
System.out.println(names);
}2.如果我们需要根据字符串类表来创建相应的Person引用类表,这时我们需要创建对象。尽管仍然可以使用方法引用,不过这次我们改用关键字new,这种语法成为构造函数引用。
实例:
(1)使用lambda表达式(依旧使用上面例子的Person类):
public static void main(String[] args){ //创建一个数组,存放要Person对象的信息
String strArray[]={"xiaoqiang","xiaohong","xiaohua"}; //将字符串数组转换为List集合
List<String> names=Arrays.asList(strArray);
//将人名字符串类表转换为Person引用类表
List<Person> people=names.stream().map(name->new Person(name)).collect(Collectors.toList());
//在控制台打印出名字列表
System.out.println(people);
}(2)使用构造方法引用:
//将人名字符串类表转换为Person引用类表
List<Person> people=names.stream().map(Person::new).collect(Collectors.toList());释:Person::new的作用是引用Person类中的构造函数。与所有lambda表达式类似,由上下文决定执行哪个构造函数。由于上下文提供了一个字符串,因此使用单参数的String构造函数。
#笔记##Java#
查看12道真题和解析
凡岛公司福利 839人发布