Как искать данные в объекте и приводить к списку - PullRequest
0 голосов
/ 25 июня 2019

Я хочу найти значение из объекта и преобразовать результат в список

Я попытался получить имя объекта данных «data» и хочу найти каждый элемент, имеющий «querytext». Как преобразовать данные объекта вСписок

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
}

edit

MovieResponse.java

public class MoviesResponse extends ArrayList<MovieData> {
}

MovieDataService.java

public interface MovieDataService {
  MoviesResponse fetchAll();
}

Тип данных, которые я получилэто список MovieData, но я хочу, чтобы результат в List of Movie, как исправить тот или иной способ сделать.и без изменений ничего в 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" .in sql в ситуации, когда он может использовать "like". Как использовать "like" с этим фильтром?

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Попробуйте использовать потоковую карту

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

0 голосов
/ 25 июня 2019

Вместо того, чтобы извлекать все фильмы и фильтровать их по потоку, напишите метод, который запрашивает те, которые вы хотите.

Что-то вроде

SELECT * FROM movies WHERE title = 'queryText'

В зависимости от вашегокод / ​​рамки, вы должны реализовать это или просто выбрать другой метод в MovieDataService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...