我想从对象中搜索值并将结果转换为列表
我试图获取数据对象名称“ data”,我想搜索每个具有“ querytext”的项目。如何将对象数据转换为List
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;
}
}
MovieData.java
public class MovieData {
private String title;
private int year;
private List<String> cast;
private List<String> genres;
getter and setter
}
Movie.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> {
}
MovieDataService.java
public interface MovieDataService {
MoviesResponse fetchAll();
}
我得到的数据类型是MovieData列表,但是我想要电影列表中的结果如何解决此问题或另一种方法。并且不更改 Movie.java 或 MovieData中的任何内容.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”。如何将此过滤器使用“喜欢”吗?
答案 0 :(得分:0)
编写一种查询所需电影的方法,而不是获取所有电影并按流过滤它们。
类似
SELECT * FROM movies WHERE title = 'queryText'
根据您的代码/框架,您必须实现此功能或仅在MovieDataService中选择另一个方法。
答案 1 :(得分:0)
尝试使用流图
data.stream() // problem in this line
.filter(item -> item.getTitle().equals("queryText"))
.map(movie -> {
//logic to transform MovieResponse in Movie here
})
.collect(Collectors.toList());
更多内容,请访问:https://dzone.com/articles/how-to-use-map-filter-collect-of-stream-in-java-8