gpt4 book ai didi

java - 使用stream获取带有id的列表

转载 作者:行者123 更新时间:2023-12-02 09:46:53 26 4
gpt4 key购买 nike

我想使用此代码中的流来实现搜索:

DTO:

public class FilterNewDTO
{
private Integer id;
private Integer terminal_id;
private Integer position;
private Integer parent_id;
}

排序:

List<Filters> filterList = filterService.findFiltersByTerminalId(terminalId);

for (int i = 0; i < newFiltersPositionsList.size(); i++) {
Filters filter = filterList.findById(newFiltersPositionsList.get(i).getId());
filter.setPosition(newFiltersPositionsList.get(i).getPosition());
filterService.save(filter);
}

我尝试过这个:

filterList.stream()
.filter(filter -> filter.findById(newFiltersPositionsList.get(i).getId()));

但是我收到错误The method findById(int) is undefined for the type RiskFilters 你能指导我如何在列表filterList中查找元素吗?

最佳答案

过滤器方法需要一个 Predicate 对象作为参数。来自流 API:Stream<T> filter(Predicate<? super T> predicate);因此 T,它是一个泛型类型,将采用与列表相同的类型。所以你的代码将如下所示:

List<Filters> filteredList =  filterList.stream().filter(new Predicate<Filters>() {
@Override
public boolean test(Filter f) {
return f.id == some-id;
}
}).collect(Collectors.toList());

从Predicate类可以看出,它是一个FunctionalInterface:

@FunctionalInterface
public interface Predicate<T> {

boolean test(T t)
};

如果test(T t)方法返回 true ,当前对象将保留在流中。因此,可以将其重写为 lambda 表达式,如下所示:

List<Filters> filteredList =  filterList.stream().filter(f -> f.id == some-id).collect(Collectors.toList());

关于java - 使用stream获取带有id的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com