这是使用Java流api的最佳性能方法吗
我需要从这个字符串数组中创建一个新的字符串列表:
String[] groups = {
"A_group1,AAAAA",
"A_group2",
"A_group3",
"B_group4",
"B_group5",
"B_group6,BBBBBBB",
"C_group7",
"C_group8",
"C_group9,CCCCC",
};
我必须保留以以下前缀开头的字符串:
Map<String, String> mapping = new HashMap<>();
mapping.put( "prefix1", "A_" );
mapping.put( "prefix2", "B_" );
我想使用Java Streams,但我是这些API的新手,所以我编写了以下代码:
mapping.values().forEach( prefix ->
roles.addAll( stream( groups ).parallel().filter(
group -> group.startsWith( prefix )
).map(
group -> group.split( "," )[0].substring( prefix.length() )
).collect( toList() ) )
);
结果是:
[group4, group5, group6, group1, group2, group3]
这是正确的。但是我想知道是否有性能更好的代码
# 1 楼答案
这种逻辑效率低下,而且与流的使用无关
您的外部循环应该在“groups”上,然后对照映射的值集进行检查,这是O(1)复杂度。比如:
如果你在过滤器上循环,你最终会在组上循环n次,使复杂度为O(n^2),而不是线性
其余的在我看来很好:如果使用流API或纯旧for循环,就不会有太大的变化。只是要知道,如果你有大量的组,并行化流是有意义的;对于少数组来说,管理并行化的开销实际上会使执行速度变慢