Oct*_*cia 3 java lambda java-8
我有两个列表流,一个是字符串(县),另一个是对象(txcArray).我需要遍历两个列表并将一个县的实例与txcArray的实例进行比较,并且它们匹配递增一个计数器,如果它们没有,我会继续前进.我需要使用java 8 lambda表达式这样做,这是我到目前为止所做的.
counties.stream().forEach(a-> {
txcArray.stream()
.filter(b->b.getCounty().equals(a))
.map(Map<String,Integer>)
});
Run Code Online (Sandbox Code Playgroud)
你的错误在于使用forEach.
List<Long> counts = counties.stream()
.map(a -> txcArray.stream().filter(b -> b.getCounty().equals(a)).count())
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是,这不是非常有效,执行counties.size() × txcArray.size()操作.当列表较大时,这可能很容易失控.
最好使用
Map<String, Long> map = txcArray.stream()
.collect(Collectors.groupingBy(b -> b.getCounty(), Collectors.counting()));
List<Long> counts = counties.stream()
.map(a -> map.getOrDefault(a, 0L))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这将执行counties.size() + txcArray.size()操作,这对于较大的列表将更有效,因此,优选地,即使它不是单个流操作而是使用中间存储.
| 归档时间: |
|
| 查看次数: |
1535 次 |
| 最近记录: |