перекрестная проверка двух ArrayList, чтобы найти текст, содержащий несколько слов - PullRequest
0 голосов
/ 27 января 2020

Здесь у меня есть два объекта Array, но каждый из них содержит различные типы объектов. children содержит объект State // выглядит так Nh3 Kf6 20. Ng1 Kg6 21. Nh3 Kf5 22. Rb1 врагаLocation - это объект с именем String и позицией String, // имя не имеет значения для этого, местоположение выглядит следующим образом // f5, это может быть любая комбинация буквы / цифры .

Мне нужно проверить и посмотреть, есть ли у детей вражеская позиция на них

, например:

child = Nh3 Kf6 20. Ng1 Kg6 21. Nh3 Kf5 22. Rb1
enemy.position = f5

Это значение равно null, однако я хочу, чтобы оно вернулось истина, потому что child содержит f5 в Kf5. Я понимаю, что это не так, но я хочу вернуть true, если эта комбинация найдена. чувствительный к регистру.

for (State child: children) {
    for (Enemy enemy: enemyLocation) {
        System.out.println("children: " + child.toString()); // Nh3 Kf6 20. Ng1 Kg6 21. Nh3 Kf5 22. Rb1
        System.out.println("enemyLocation: " + enemy.position.toString()); // f5

        if (child.toString().contains(enemy.position.toString())) {

            target = child;

        }
    }
}

другая проблема, с которой я сталкиваюсь, это вложенная l oop, я не уверен, как я могу это оптимизировать; Я хотел использовать что-то вроде ниже, но это вернет только true / false, не сообщая мне, кто из детей является тем врагом

if (children.toString().contains(enemy.toString()))

Ответы [ 2 ]

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

Не могли бы вы проверить это, это может работать для вас.

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Nh3 Kf6 20");
        list.add("Ng1 Kg6 21");
        list.add("Nh3 Kf5 22");
        list.add("Rb1");
        String enemy = "f5";
     int index = list.parallelStream().filter(x -> x.indexOf(enemy) > 0).mapToInt(x -> x.indexOf(enemy)).max().orElse(0);// You can directly get index using this function, It will return 0 if there is not any matches found else will return last index(As we have used max)



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

Предполагая разные позиции противника, вы можете использовать метод indexOf, встроенный в класс String, чтобы найти подходящего ему ребенка.

if(children.toString().contains(enemy.toString())){
    String[] temp = Arrays.toString(children).split("[^a-zA-Z0-9']\\s");
    int index = Arrays.asList(temp).indexOf(enemy.toString());
    target = children[index - 1]; //the -1 is due to brackets being part of 
    //string 
    //or children.get(index) depending on what type of array object you're 
    //using
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...