Java中学习Stream流的map方法
一、介绍
当学习Lambda表达式时,了解和掌握map()
方法是非常重要的,因为它是函数式编程中常用的一种转换操作。在Java中,map()
方法通常与流(Stream)一起使用,用于将流中的每个元素映射到另一个元素。
下面是关于map()
方法的一篇学习指南:
二、学习Lambda表达式中的map()
方法
1、什么是map()
方法?
map()
方法是流(Stream)类中的一个中间操作方法,它接受一个函数作为参数,并将该函数应用于流中的每个元素,然后返回一个新的流,其中包含由该函数的结果组成的元素。
2、语法
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
Function<? super T, ? extends R>
:接受一个泛型类型T的参数,并返回一个泛型类型R的结果的函数。
3、示例
假设我们有一个字符串列表,我们想将其中每个字符串转换为大写形式。我们可以使用map()
方法来实现这个转换:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> upperCaseNames = names.stream()
.map(name -> name.toUpperCase())
.collect(Collectors.toList());
System.out.println(upperCaseNames); // 输出: [ALICE, BOB, CHARLIE]
4、 解析
- 我们首先将字符串列表转换为流,使用
stream()
方法。 - 然后,我们调用
map()
方法,并传递一个Lambda表达式,该表达式将每个元素转换为大写形式。 - 最后,我们使用
collect(Collectors.toList())
方法将流中的元素收集到一个新的列表中。
1、注意事项
map()
方法返回的是一个新的流,原始流不会受到影响。- 传递给
map()
方法的Lambda表达式应该是无状态的,不应该修改外部的状态或变量。
2、应用场景
- 数据转换:将一种类型的数据转换为另一种类型。
- 数据提取:从对象中提取特定属性或信息。
- 数据处理:对数据进行逻辑处理或计算。
3、结论
map()
方法是Lambda表达式中一个非常有用且强大的功能,它使得在集合数据上进行转换和处理变得更加简单和直观。通过学习和掌握map()
方法,你将能够更好地利用Lambda表达式来提高Java编程的效率和可读性。
二、案例举例
public void test() throws ParseException {
List<People> peopleList = new ArrayList<People>();
People people1 = new People("张三", 18);
People people2 = new People("王五", 19);
peopleList.add(people1);
peopleList.add(people2);
Stream<String> peopleStream = peopleList.stream().map(
//使用匿名接口Function重写抽象方法apply,参数一为传入类型,参数二为传出类型
new Function<People, String>() {
@Override
public String apply(People people) {
people.setName("姓名:" + people.getName());
return people.getName();
}
}
);
peopleStream.forEach(s -> System.out.println(s));
System.out.println("========================================================");
Stream<People> peopleStream2 = peopleList.stream().map(
//lambda
s->addAge(s)
);
peopleStream2.forEach(s -> System.out.println(s));
}
public People addAge(People people){
people.setAge(people.getAge()+1);
return people;
}
2、实体类
public class People {
private String name;
private int age;
public People(String name, int age) {
this.name = name;
this.age = age;
}
public People() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
3、效果
三、其他
Stream中of方法传入可变参数
Stream中map元素类型转化方法
1、stream流获取某一个字段集合
List<String> names = personList.stream()
.map(person -> person.getName())
.collect(Collectors.toList());
- 坚持并不是一时的决心,而是每一天不断行动的力量。
- 不管过去有多少失败,未来依然是胜利的希望之地。
- 当你放下过去的包袱,才能迈向更美好的未来。
- 梦想不会自动成真,需要我们用行动和努力去实现。
- 如果你相信自己,无论多困难的道路都能走出光明的终点。