java - Stream.flatMap() 从 char[] 到字符流
问题描述
import java.util.*;
import java.util.stream.*;
class Playground {
public static void main(String[] args)
{
// Creating a character array
char arr[] = { '1', '2', '3', '4', '5' };
// --------- Using Stream.of() ---------
// Will work efficiently
// to convert int array into Stream
Stream<char[]> stream = Stream.of(arr);
Stream<Integer> s = stream.flatMap((item)->new String(item).chars().mapToObj(a->(char)a));
// Displaying elements in Stream
s.forEach(str -> System.out.print(str + " "));
}
}
我正在尝试使用 flatMap() 将 char[] 转换为字符流,但出现以下错误
./Playground/Playground.java:14: error: incompatible types: inference variable R has incompatible bounds
Stream<Integer> s = stream.flatMap((item)->new String(item).chars().mapToObj(a->(char)a));
^
equality constraints: Integer
lower bounds: U,Character
where R,T,U are type-variables:
R extends Object declared in method <R>flatMap(Function<? super T,? extends Stream<? extends R>>)
T extends Object declared in interface Stream
U extends Object declared in method <U>mapToObj(IntFunction<? extends U>)
1 error
需要帮助了解错误以及如何完成此任务。具体来说,这是如何使用从 char[] 到字符流的 flatMap() 修复这行代码的。
Stream<Integer> s = stream.flatMap((item)->new String(item).chars().mapToObj(a->(char)a))
编辑:所以问题结果不是关于 Stream 而是关于 lambda 表达式,我在意外修复 lambda 表达式后抽搐了线路并弄乱了打字。原来的行是
Stream<Character> s = stream.flatMap(item->{new String(item).chars().mapToObj(a->(char)a);});
问题是 {} 中缺少 return 语句。然后我把这条线改成
Stream<Integer> s = stream.flatMap((item)->new String(item).chars())
因为我认为 IntStream::mapToObj 造成了麻烦,但是我最后忘记了 boxed() 并得到了另一个类型错误,所以我添加了 IntStream::mapToObj 并发布了问题,但忘记将 Stream 类型更改回 Character。我很困惑,但现在雾已经散去。谢谢你的好答案。
解决方案
你快到了。只需替换Stream<Integer>
to Stream<Character>
,因为您char
在代码中转换为 a 。
但是,关于您的代码的问题是您不必要地flatMap
ping。Stream.of
期望一个具有引用类型的数组作为其复合类型。此外,Arrays.stream
对于 没有重载char[]
。你最终会流过一些保证是单个元素的东西。该元素是您的char[]
.
您可以删除flatMap
操作,直接将 char 数组转换为字符串。
String str = new String(arr);
Stream<Character> characterStream = str.chars().mapToObj(c -> (char) c);
推荐阅读
- java - 具有 OneToOne 映射的两个实体上的 PK 自定义序列生成器引发异常
- docker - 如何在 jenkins 管道中为 docker build 命令指向具体的 Dockerfile?
- c++ - 如何修复 stlsoft.h 中的 VS2017 错误 C1189
- c++ - 当有可用的右值构造函数时,为什么从右值调用类引用构造函数重载?
- sql - 插入父子记录
- node.js - 使用 nodeJs 发布 aws 实例的内存利用率指标
- amazon-web-services - apache griffin 如何与 AWS S3 配合使用?
- python - 从嵌套字典中检索特定的键和值,并将它们分配到 python 3.X 中的新字典中
- python - ModuleNotFoundError:没有名为“sklearn.decomposition”的模块
- bash - 如何使用 telnetlib 检查从特定源服务器到目标服务器的连接