gpt4 book ai didi

Java Stream 在字符或字节数组中未按预期工作

转载 作者:行者123 更新时间:2023-12-01 16:50:33 29 4
gpt4 key购买 nike

// code snippet 1:-
Stream.of(Paths.get("/tmp").toFile().listFiles()).forEach(System.out::println);

output:
/tmp/.keystone_install_lock
/tmp/.vbox-srirammuthaiah-ipc
/tmp/a.txt
/tmp/b.txt
/tmp/com.apple.launchd.1enUeBRkSj
/tmp/com.apple.launchd.KIcK6WPwWH
/tmp/mbbservice.pid
/tmp/mv.txt
/tmp/wifi-12-03-2016__18:16:24.log


// code snippet 2:-
String line = "Hello how are you";
Stream.of(line.toCharArray()).forEach(System.out::println);

output:
Hello how are you

这里的文件列表被视为文件数组并一一处理,而字符串到字符数组的转换在方法流中不起作用并作为单个字符串处理。

我期望的是第二个代码片段的输出应该如下所示,与文件流处理相同。

Expected output:  
H
e
l
l
o

h
o
w

a
r
e

y
o
u

非常感谢您的帮助。

最佳答案

您正在调用 Stream.of(..) 的两个不同重载:

Stream.of(T object)
Stream.of(T... objects)

toCharArray()返回 char[]这不是 T[]因为原始数组是不同于通用数组的特定类型 T[] (这是一个Object[]在引擎盖下)。

所以基本上listFiles()返回 File[]与签名 of(T... object) 匹配并生成一个包含所有 File 的流实例同时 toCharArray()返回 char[]匹配 of(T object)并返回一个仅包含该元素的流。

注意 String 类已经提供了 chars()返回 IntStream 的方法为了您的目的:

"Hello how are you".chars().forEach(c -> System.out.println((char)c) }
"Hello how are you".chars().mapToObj(c -> (char)c).forEach(...)

关于Java Stream 在字符或字节数组中未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954783/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com