Java - Как получить каждое слово из ArrayList предложений - PullRequest
0 голосов
/ 13 января 2020

Пример, как проверить, присутствуют ли слова из списка containsThese в списке sentences и сколько?

List<String> sentences = Arrays.asList("wish you a good day", "warm day", "sounds good");

List<String> containsThese = Arrays.asList("cool", "day", "good");

Что я делал:


for (int i = 0; i < sentences.size(); i++){

   String words = sentences.get(i);

   // so here I have each sentence separately
   // but how to iterate through it and add each word to another ArrayList or something?
   // so later can compare to it to 'containsThese' ?

}

Любые предложения приветствуются, спасибо.

Ответы [ 3 ]

0 голосов
/ 13 января 2020

Для лучшей производительности начните с построения Set всех слов в предложениях, затем посчитайте слова, которые можно найти в наборе.

List<String> sentences = Arrays.asList("wish you a good day", "warm day", "sounds good");
List<String> containsThese = Arrays.asList("cool", "day", "good");

Set<String> words = sentences.stream()
        .flatMap(Pattern.compile("\\s+")::splitAsStream)
        .collect(Collectors.toSet());
long wordsFound = containsThese.stream()
        .filter(words::contains)
        .count();

System.out.printf("Sentences contains %d of %d words%n", wordsFound, containsThese.size());

Вывод

Sentences contains 2 of 3 words
0 голосов
/ 13 января 2020
List<String> sentences = ArrayList<String>("wish you a good day", "warm day", "sounds good");
Iterator itr=sentences.iterator();
while(itr.hasNext()){
String s=itr.next();
}
0 голосов
/ 13 января 2020

С помощью функции, приведенной ниже, вы разделяете предложение на каждый пробел и добавляете слова в новый список.

private List<String> sentenceToList(String sentence) {
  return new ArrayList<>(Arrays.asList(sentence.split("\\s+")));
}

С помощью этой функции вы получаете карту, в которой предложение является ключом и список со всеми содержащимися в нем словами содержит .These.

private Map<String, List<String>> checkSentences() {
    Map<String, List<String>> containsMap = new HashMap<>();
    sentences.forEach(sentence -> {
        containsMap.put(sentence, sentenceToList(sentence).stream().distinct().filter(word -> containsThese.contains(word)).collect(Collectors.toList()));
    });
    return containsMap;
}

Возвращает -> {warm day=[day], sounds good=[good], wish you a good day=[good, day]}

...