Возврат содержимого индекса ArrayList в зависимости от того, соответствует ли вход сканера слову в том же индексе - PullRequest
0 голосов
/ 08 мая 2018

Я хочу вернуть содержимое индекса ArrayList, основываясь на том, соответствует ли вход сканера какому-либо из слов внутри указанного индекса.

Так что если индекс ArrayList 0 содержит

<dog, cat, mouse>`

и индекс 1 содержит

<football, baseball, rugby>

и scanner input = "football",

Указатель 1 во всей его полноте должен быть напечатан.

Однако я не уверен, как это сделать, поэтому любой совет будет фантастическим.

Edit:

Приведенный ниже код читает файл, из которого я получаю данные, и сохраняет каждую отдельную строку в виде индекса.

while (fileScanner.hasNextLine()) {
            editList.add(fileScanner.nextLine());
        }

Приведенный ниже код читает входные данные, и если входные данные editScanner находятся внутри editList, то индекс должен быть напечатан. Тем не менее, я знаю, что это неправильно, но я совершенно не уверен, как распечатать содержимое индекса в виде строки

 if (editList.contains(editScanner)) {
                        while (((edit = fileReader.readLine()) != null)) {
                            String chosenFilm = editList.indexOf(editScanner);
                        }

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Учитывая, что ваша структура является List<List<String>> и input:

List<List<String>> list = new ArrayList<>();
list.add(Arrays.asList("dog", "cat", "mouse"));
list.add(Arrays.asList("football", "baseball", "rugby"));

Scanner sc = new Scanner(System.in);
String input = sc.nextLine();

Вы можете сделать следующим образом

  1. Переберите другой subLists и найдите хороший (остановитесь, когда найдете)

    int index = -1;
    for (int i = 0; i < list.size(); i++) {     // iterate
        if (list.get(i).contains(input)) {      // check if present
            index = i;                          // keep index
            break;
        }
    }
    
  2. Использование Streams

    index = list.stream()                       // iterate
                .filter(l -> l.contains(input)) // keep sublist where present
                .mapToInt(list::indexOf)        // transform it to its index
                .findFirst()                    // keep index
                .orElse(-1);                    // if not found return -1
    
0 голосов
/ 08 мая 2018

Сделайте ваш список массивом наборов, таким образом:

 List<Set<String>> yourList = new ArrayList<>();

Затем, чтобы проверить, нужно ли печатать индекс, потому что на нем есть футбол, просто сделайте

 yourList.get(i).contains("football")

Если вы не можете повторить футбол по различным индексам, используйте вместо этого карту, используя футбол в качестве ключа, а индексный футбол указан в качестве значения.Затем вы можете проверить индекс и распечатать его непосредственно из списка.

...