首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我想从java中的char数组创建字符流

我想从java中的char数组创建字符流
EN

Stack Overflow用户
提问于 2015-07-22 12:44:24
回答 8查看 59.8K关注 0票数 65

在char数组中,我想构造一个使用java8特性的流,比如过滤器和映射。

代码语言:javascript
复制
char[] list = {'a','c','e'};
Stream<Character> cStream = Stream.of(list);
// Stream<Character> cStream = Arrays.stream(list);

第一种方法不起作用(原因:将cStream更改为Stream<char[]>)。注释行也不起作用(原因:类型数组中的方法stream(T[])不适用于参数(char[]))。

我知道如果将char[] list更改为int[],使用IntStream时一切都会正常工作。但我不想每次都将每个char[]转换为int[],或者当我需要在char数组上使用流程库时将其转换为列表。

EN

回答 8

Stack Overflow用户

发布于 2015-07-22 16:03:17

您可以使用后跟mapToObjIntStream来生成索引

代码语言:javascript
复制
char[] arr = {'a','c','e'};
Stream<Character> cStream = IntStream.range(0, arr.length).mapToObj(i -> arr[i]);
票数 46
EN

Stack Overflow用户

发布于 2016-07-20 19:03:56

实现此目的的一种方法是通过String对象:

代码语言:javascript
复制
char[] list = {'a','c','e'};
Stream<Character> charStream = new String(list).chars().mapToObj(i->(char)i);

我喜欢这样做,因为转换数组的所有复杂性都被包装到字符串创建中,而且char的包装也是在后台为我执行的,因此我可以专注于业务逻辑。

票数 38
EN

Stack Overflow用户

发布于 2015-07-27 17:17:04

char[]阵列创建IntStream的一种简单而有效的方法是使用java.nio.CharBuffer

代码语言:javascript
复制
char[] list = {'a','c','e'};
IntStream stream = CharBuffer.wrap(list).chars();

这样,您就可以使用IntStream将int值解释为字符。如果您需要盒装的Stream<Character> (效率可能较低),请使用

代码语言:javascript
复制
Stream<Character> stream = CharBuffer.wrap(list).chars().mapToObj(ch -> (char)ch);

使用CharBuffer可能比IntStream.range快一点,因为它内部有自定义拆分器,所以它不必执行额外的lambda (可能是缓慢的多态调用)。此外,它只引用char[]数组一次,并且不在lambda中,因此它可以与非最终数组变量或函数返回值(如CharBuffer.wrap(getCharArrayFromSomewhere()).chars())一起使用。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31554025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档