使用流获取ID列表

时间:2019-06-13 13:53:40

标签: java

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

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中找到该元素吗?

2 个答案:

答案 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>>);