java Трансляция пользовательского класса - PullRequest
0 голосов
/ 08 июля 2020

Я занимаюсь шахматами, и прямо сейчас я работаю над проверкой того, действительно ли Фигура, выбранная игроком, принадлежит игроку (а не другому игроку). Поэтому мне нужно проверить массив Pieces, принадлежащий игроку, и посмотреть, есть ли там указанный c Piece.

Недавно я узнал о лямбдах и потоковой передаче, поэтому решил, что это хорошее место для попытаться использовать те, а не просто расширенный для l oop. Но я получаю следующее сообщение об ошибке:

Cannot invoke stream() on the array type Piece[]

Я когда-либо использовал поток только для примитивных значений, но мои поиски в Google о том, как передавать объекты, не смогли найти соответствующую информацию. В любом случае, надеюсь, это не вопрос новичков. Вот мой код

public boolean hasPiece(Piece piece) {      
    lambdaContains runCheck = arr -> {
        boolean result = arr.stream().anyMatch(x -> x == piece);
        return result;
    };
    return runCheck.doesHave(team);
}


interface lambdaContains {
    boolean doesHave(Piece[] team);
}

Изменить: это действительно была глупая ошибка. Лав sh опубликовал правильный ответ, который я пробовал, но не понял, что мне нужно импортировать java .util.Arrays Всем спасибо!

Ответы [ 2 ]

3 голосов
/ 08 июля 2020

Вы можете использовать Arrays.stream()

public boolean hasPiece(Piece piece) {      
        lambdaContains runCheck = arr -> {
            boolean result = Arrays.stream(arr).anyMatch(x -> x == piece);
            return result;
        };
        return runCheck.doesHave(team);       
    
    }


interface lambdaContains {
        boolean doesHave(Piece[] team);
    }
2 голосов
/ 08 июля 2020

Я бы сделал что-то более простое (если ваш массив Piece[] arr):

public boolean hasPiece(Piece piece) { 
    return Arrays.stream(arr).anyMatch(p -> Objects.equals(piece, p));
}
...