首页 > 解决方案 > 如何在对象中搜索数据并转换为列表

问题描述

我想从对象中搜索值并将结果转换为列表

我试图获取数据对象名称“数据”,我想搜索每个具有“查询文本”的项目。如何将对象数据转换为列表

public class SimpleMovieSearchService implements MovieSearchService {
   @Autowired
   private MovieDataService movieDataService;

   @Override
   public List<Movie> search(String queryText) {
   MoviesResponse data =movieDataService.fetchAll();
       List<Movie> result = data.stream() // problem in this line 
            .filter(item -> item.getTitle().equals("queryText"))
            .collect(Collectors.toList());

    return result;
   }
}

电影数据.java

public class MovieData {
   private String title;
   private int year;
   private List<String> cast;
   private List<String> genres;

   getter and setter
}

电影.java

public class Movie {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Long id;

   private String name;

   @ElementCollection(fetch = FetchType.EAGER)
   private List<String> actors = new ArrayList<>();

 getter and setter
}

编辑

MovieResponse.java

public class MoviesResponse extends ArrayList<MovieData> {
}

电影数据服务.java

public interface MovieDataService {
  MoviesResponse fetchAll();
}

我得到的数据类型是 MovieData 列表,但我希望得到电影列表中的结果,如何解决这个问题或其他方法。并且不更改Movie.javaMovieData.java中的任何内容

更新

现在我可以用这种方式

MoviesResponse a = movieDataService.fetchAll();
    List<Movie> result = a.stream()
            .map(movie -> new Movie(movie.getTitle()))
            .filter(movie -> movie.getName().equals(queryText)) //this line
            .collect(Collectors.toList());

如果数据是“banana”、“nature”、“red”,然后查询文本是“na”,我希望结果是“banana”和“nature”。在 sql 中它可以使用“like”。如何使用“like “用这个过滤器?

标签: javaspringspring-boot

解决方案


不要通过流获取所有电影并对其进行归档,而是编写一个查询您想要的电影的方法。

就像是

SELECT * FROM movies WHERE title = 'queryText'

根据您的代码/框架,您必须实现此功能,或者只需在 MovieDataService 中选择另一种方法。


推荐阅读