6 java lambda functional-programming java-stream
我有以下 Java Stream 流语句,并根据 typeId 值过滤记录 types.getIds().contains(x.getType().getId()):
return petRepository.findAll().stream()
.filter(x -> types.getIds().contains(x.getType().getId()))
.collect(Collectors.groupingBy(x -> x.getType().getName(), Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
但是,我想在types.getIds().size() == 0尝试以下 shpon 时获取所有值:
.filter(types.getIds().size() > 0 ? x -> types.getIds().contains(x.getType().getId()) : <NO FILTERING>)
Run Code Online (Sandbox Code Playgroud)
那么,我怎样才能跳过过滤呢types.getIds().size() == 0?
如果您不想检查每个 是否为空x,您可以将整个 lambda 放入三元表达式中:
return petRepository.findAll().stream()
.filter(types.getIds().isEmpty() ? x -> true
: x -> types.getIds().contains(x.getType().getId()))
.collect(Collectors.groupingBy(x -> x.getType().getName(), Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
或者将流弹出到临时变量中并filter()有条件地应用整个流:
Stream<X> stream = petRepository.findAll().stream();
if (!types.getIds().isEmpty()) {
stream = stream.filter(x -> types.getIds().contains(x.getType().getId()));
}
return stream.collect(Collectors.groupingBy(x -> x.getType().getName(), Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
怎么样
return petRepository.findAll().stream()
.filter(x -> types.getIds().isEmpty() ||
types.getIds().contains(x.getType().getId()))
.collect(Collectors.groupingBy(x -> x.getType().getName(), Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |