我有一套钥匙。
class X {
private static String[] keys = {"k1", "k2", ... };
我必须从请求中提取键的值。我想我可以使用map
来提取值并在某些请求处理方法中创建列表必需的对象,如下所示:
public void processReq(Request req) {
...
Stream.of(keys).map(k-> new Pack(k, req.getHeader(k)));
但是,每个请求创建Stream
看起来都是不必要的任务。如果在多个线程之间共享Stream
实例是安全的,我想我可以像这样修改代码:
class X {
private static Stream<String> keys = Stream.of("k1", "k2", ...);
...
public void processReq(Request req) {
...
keys..map(k-> new Pack(k, req.getHeader(k)));
那么,在多个线程之间共享Stream
实例是否安全?
答案 0 :(得分:6)
Streams不打算多次使用,即使在同一个线程中也是如此。如果您想拥有一个集合,请使用List(或数组)
private static final List<String> keys = Arrays.asList("k1", "k2", ...);
这可以多次使用。
List<Pack> packs = keys.stream()
.map(k-> new Pack(k, req.getHeader(k)))
.collect(Collectors.toList());
在您的代码中,new Pack
或req.getHeader
是花费大部分时间的地方。
答案 1 :(得分:0)