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

标签 java

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

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/

相关文章:

java - 如何从curl获取REST Web服务中的参数?

java - 服务器启动时的调用方法

Java - 将 ArrayList< int[] > 转换为 int[][]

java - 错误 :Could not initialize class com. android.sdklib.repositoryv2.AndroidSdkHandler

java - 如何在用户登录seam之前获取应用程序上下文变量

java - Hbase不允许使用JAVA API填充数据

java - 使用 Java 在 Android 中单击时更改 TextView 的背景颜色

java - 为 JSP 和 Thymeleaf 设置两个模板解析器

java - android quiz 单选按钮不显示正确的值

java - 线程 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 10 中的异常