Lambda将List<Long>转换成List<String>出现Lambda can be replaced with method reference

0. 说明

将Long转换为字符串的方式有很多种,如toString,valueOf,拼接字符串,new String()等。

1. 将String集合转换成Long集合

List<String> ids = Arrays.asList("1", "2", "3", "4", "5");
List<Long> collect = ids.stream().map(Long::parseLong).collect(Collectors.toList());

2. 将Long集合转换成String集合

List<Long> ids = Arrays.asList(1L, 2L, 3L, 4L, 5L);
List<String> collect = ids.stream().map(String::valueOf).collect(Collectors.toList());

3. 出现警告的原因是因为推荐使用方法引用(就是上面的写法)

// 出现警告的写法
List<Long> collect = ids.stream().map(id -> id.toString()).collect(Collectors.toList());

4. 使用String的toString()或者Long的toString()报错

// 出现报错
List<String> collect = ids.stream().map(String::toString).collect(Collectors.toList());

这是因为toString方法不需要参数,但是再map中是一个函数接口,默认是要传参数的。
可以了解一下:https://blog.csdn.net/weixin_44415764/article/details/107535276

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

5. 最后,使用map方法获取对象中的数据后建议过滤一下为null的数据

List<User> list = Arrays.asList(
        new User("段誉","男",18),
        new User("段誉","男",18),
        new User("段誉","男",14),
        new User("段誉","男",27),
        new User("段誉","男",null),
        new User("段誉","男",36)
);
// 注意点:如果查询的获取list中的所有年龄时,返回结果还是6个,一般情况下建议做过滤处理
list.stream()
	.map(User::getAge)
	.filter(ObjectUtil::isNotEmpty) // 将为空的数据过滤掉
	.map(String::valueOf)
	.collect(Collectors.toList());

你可能感兴趣的:(后端,java,list,java)