我想使用此代码中的流来实现搜索:
DTO:
$(document).ready(function()
{
$(".left_pannel ul li ul").on("click",function()
{
if ($(this).hasClass('submenu'))
{
$(".left_pannel ul li").addClass("iconadd");
}
else
{
$(".left_pannel ul li").removeClass("iconadd");
}
});
});
排序:
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
中找到该元素吗?
答案 0 :(得分:1)
filter方法期望使用Predicate对象作为参数。通过Stream 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());
答案 1 :(得分:0)
按如下所示更改filter()
代码。
filterList.stream()
.filter(flr -> flr.id == <<id>>);