Java8 - Streams map()
2023-02-19 12:19:55 时间
文章目录
- 概述
- Case 1 : A List of Strings to Uppercase
- Case 2 : List of objects -> List of String
- Case 3 : List of objects -> List of other objects
- Test
概述
Stream.map()
是Stream最常用的一个转换方法,它把一个Stream
转换为另一个Stream
map()
方法用于将一个Stream
的每个元素映射成另一个元素并转换成一个新的Stream
;
可以将一种元素类型转换成另一种元素类型。
/**
* Returns a stream consisting of the results of applying the given
* function to the elements of this stream.
*
* <p>This is an <a href="package-summary.html#StreamOps">intermediate
* operation</a>.
*
* @param <R> The element type of the new stream
* @param mapper a <a href="package-summary.html#NonInterference">non-interfering</a>,
* <a href="package-summary.html#Statelessness">stateless</a>
* function to apply to each element
* @return the new stream
*/
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
map()
方法接收的对象是Function
接口对象,它定义了一个apply()
方法,负责把一个T
类型转换成R
类型。
其中,Function的定义为
@FunctionalInterface
public interface Function<T, R> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t); // 将T类型转换为R:
....
....
....
}
Case 1 : A List of Strings to Uppercase
/**
* A List of Strings to Uppercase
*/
public static void StringsListToUppercase() {
List<String> list = Arrays.asList("a", "b", "c", "d");
// before java 8
List<String> newList = new ArrayList<>();
for (String str : list) {
newList.add(str.toUpperCase());
}
System.out.println(newList);
// java 8
List<String> collect = list.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(collect);
// Extra, streams apply to any data type.
List<Integer> integers = Arrays.asList(1, 2, 3, 4);
List<Integer> collect1 = integers.stream().map(t -> t * 2).collect(Collectors.toList());
System.out.println(collect1);
}
Case 2 : List of objects -> List of String
/**
* List of objects -> List of String
*/
public static void objectsListToStringList() {
List<Artisan> artisanList = Arrays.asList(
new Artisan("小A", 18, new BigDecimal(100)),
new Artisan("小B", 19, new BigDecimal(200)),
new Artisan("小C", 20, new BigDecimal(300)));
// Before Java 8
List<String> nameList = new ArrayList<>();
for (Artisan artisan : artisanList) {
nameList.add(artisan.getName());
}
log.info(nameList.toString());
// Java 8
List<String> collect = artisanList.stream().map(Artisan::getName).collect(Collectors.toList());
log.info(collect.toString());
}
Case 3 : List of objects -> List of other objects
/**
* List of objects -> List of other objects
*/
public static void objectsListToOtherObjectsList() {
List<Artisan> artisanList = Arrays.asList(
new Artisan("小A", 18, new BigDecimal(100)),
new Artisan("小B", 19, new BigDecimal(200)),
new Artisan("小C", 20, new BigDecimal(300)));
// Before Java 8
List<ArtisanOther> convert2OtherList = new ArrayList<>();
for (Artisan artisan : artisanList) {
ArtisanOther artisanOther = new ArtisanOther();
artisanOther.setAge(artisan.getAge());
artisanOther.setName(artisan.getName());
if ("小C".equals(artisan.getName())) {
artisanOther.setOtherInfo("Only For 小C");
}
convert2OtherList.add(artisanOther);
}
log.info(convert2OtherList.toString());
// Java 8
artisanList.stream().map(artisan -> {
ArtisanOther artisanOther = new ArtisanOther();
artisanOther.setAge(artisan.getAge());
artisanOther.setName(artisan.getName());
if ("小C".equals(artisan.getName())) {
artisanOther.setOtherInfo("Only For 小C");
}
return artisanOther;
}).collect(Collectors.toList());
log.info(convert2OtherList.toString());
}
Test
public static void main(String[] args) {
// A List of Strings to Uppercase
StringsListToUppercase();
// List of objects -> List of String
objectsListToStringList();
// List of objects -> List of other objects
objectsListToOtherObjectsList();
}
// 俩内部类
@Data
@NoArgsConstructor
@AllArgsConstructor
static class Artisan {
private String name;
private int age;
private BigDecimal salary;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
static class ArtisanOther {
private String name;
private int age;
private String otherInfo;
}
[A, B, C, D]
[A, B, C, D]
[2, 4, 6, 8]
21:57:13.914 [main] INFO com.artisan.java8.stream2.StreamMap - [小A, 小B, 小C]
21:57:13.918 [main] INFO com.artisan.java8.stream2.StreamMap - [小A, 小B, 小C]
21:57:13.919 [main] INFO com.artisan.java8.stream2.StreamMap - [StreamMap.ArtisanOther(name=小A, age=18, otherInfo=null), StreamMap.ArtisanOther(name=小B, age=19, otherInfo=null), StreamMap.ArtisanOther(name=小C, age=20, otherInfo=Only For 小C)]
21:57:13.920 [main] INFO com.artisan.java8.stream2.StreamMap - [StreamMap.ArtisanOther(name=小A, age=18, otherInfo=null), StreamMap.ArtisanOther(name=小B, age=19, otherInfo=null), StreamMap.ArtisanOther(name=小C, age=20, otherInfo=Only For 小C)]
相关文章
- 在 Go 中生成随机的安全密码
- 在 Go 中实现一个支持并发的 TCP 服务端
- Mybatis-Plus官方发布分库分表神器,一个依赖轻松搞定!
- 快速将多个py文件及其他文件打包为exe可执行文件
- JMeter关联之正则表达式提取器
- 这份Java日志格式规范,拿走不谢!
- JavaScript 新特性最全指南:ES2023 ~ ES2016
- 后端思维篇:如何应用设计模式优化代码
- 几种限流算法的Go语言实现
- 后端思维篇:手把手教你写一个并行调用模板
- API接口设计需要注意的那些事儿
- 我修复了Pandas包的一个bug
- SpringBoot 优雅停机的正确姿势
- 爬虫必学包 lxml,搞个有趣的
- JMeter:一个简单的测试计划怎么做?
- 在 Java 代码中来一段 JavaScript?聊聊 Flowable 中的脚本任务
- Scrollend:超实用的全新JavaScript事件
- 六种老而不死的编程语言!
- 推荐一个极其轻量级的 Docker 基础镜像,大小 2MB
- 搞懂Java并发—ThreadLocal