【发布时间】:2014-07-26 04:41:57
【问题描述】:
我决定采用函数式方法来生成字符串或随机字符,到目前为止我想出了这个,它应该比装箱然后使用StringJoiner 作为收集器更好:
Random random = new Random();
String randomString = IntStream.concat(
random.ints(8, 'a', 'z'),
random.ints(8, 'A', 'Z')
)
.collect(
StringBuilder::new,
(sb, i) -> sb.append((char)i),
(sb1, sb2) -> sb1.append(sb2)
).toString();
我想生成一个 16 个字符的流,范围从 a-z 或 A-Z,我的问题是我不知道如何打乱这两个流。
我知道我在这里使用IntStream.concat,它将简单地连接两个流,我正在寻找以下任一:
- 像
IntStream.concat这样的静态运算符,在合并流时进行改组。 - 像
sorted()这样的流操作符。
在我看来,这两种方法都是可行的,但是我对如何使操作员相似sorted() 尤其感兴趣。这里的关键是它是一个有状态的算子,因为它需要在操作之前看到整个流,有没有办法在流序列中注入一个有状态的算子?
到目前为止,这些操作(不包括洗牌所需的工作)似乎不适用于 Java 8 中的函数式方法。
【问题讨论】:
标签: java functional-programming java-8 java-stream