java8用chars_为什么String.chars()是Java 8中的int数据流?

Java 8 中 `String.chars()` 方法返回 `IntStream` 而非 `CharStream` 是为了防止方法和类爆炸。尽管这可能导致性能损失,但可以使用 `mapToObj` 将 `IntStream` 映射为 `Stream<Character>` 进行处理。本文探讨了如何在 Java 8 中适当地处理字符串字符流,并提供了相关示例。
摘要由CSDN通过智能技术生成

正如其他人已经提到的,背后的设计决定是为了防止方法和类的爆炸。

不过,我个人认为这是一个非常糟糕的决定,应该,由于他们不想使CharStream,这是合理的,不同的方法,而不是chars(),我会想到:

> Stream< Character> chars(),它提供了一个盒子字符流,这将有一些轻的性能损失。

> IntStream unboxedChars(),它将用于性能代码。

然而,不是专注于为什么这是目前这样做,我认为这个答案应该重点展示一个方法来做到这一点,我们已经得到了Java 8。

在Java 7中,我会这样做:

for (int i = 0; i < hello.length(); i++) {

System.out.println(hello.charAt(i));

}

我认为在Java 8中做一个合理的方法如下:

hello.chars()

.mapToObj(i -> (char)i)

.forEach(System.out::println);

这里我获得一个IntStream并将其映射到一个对象通过lambda i – > (char)i,这将自动将其封装成一个Stream< Character&gt ;,然后我们可以做我们想要的,仍然使用方法引用作为加号。 注意,虽然你必须做mapToObj,如果你忘记和使用地图,没有什么会抱怨,但你仍然会得到一个IntStream,你可能会被遗忘,为什么它打印整数值,而不是代表的字符串字符。 其他丑陋的替代Java 8: 通过保留在IntStream中并且希望最终打印它们,您不能再使用方法引用进行打印:

hello.chars()

.forEach(i -> System.out.println((char)i));

此外,使用方法引用你自己的方法不工作了!考虑以下:

private void print(char c) {

System.out.println(c);

}

接着

hello.chars()

.forEach(this::print);

这将产生编译错误,因为可能有一个有损的转换。

结论:

API是这样设计的,因为不想添加CharStream,我个人认为该方法应该返回一个Stream< Character&gt ;,目前的解决方法是在IntStream上使用mapToObj(i - >(char)i)能够与他们正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值