Можно ли проверить таким образом, что все элементы в 2d Array одинаковы? - PullRequest
0 голосов
/ 18 января 2020

Так что я гуглил этот вопрос. И только эта ссылка от StackOF подошла. Вопросу ~ 4 года.

Я считаю, что мое решение довольно простое, но никто не писал об этом, имеет ли смысл?

Вот код:

public boolean areAllTheSame(int[][] image) {

    // Create a new set, so we can store our unique elems there.
    Set<Integer> set = new HashSet<>();

    //Iterate through all elements, add to our HashSet set
    for (int[] ints : image) {
        for (int anInt : ints) {
            set.add(anInt);
        }
    }
    // Because set has only unique elements, if all are the same => size should be 1

    return set.size() == 1;
} // end of areAllTheSame

Ответы [ 3 ]

1 голос
/ 18 января 2020

Как насчет:

public boolean areAllTheSame(int[][] image) {
  // assuming `image` >= 1x1 pixels

  int expectedPixel = image[0][0];

  for (int[] pixels: image)
    for (int pixel: pixels)
      if(pixel != expectedPixel)
        return false;

  return true;
}

Он прекращает цикл, как только узнает, что массив не является однородным, и не требует выделения HashSet<Integer>.

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

Я думаю, что есть и другие способы, используя java streaming:

public boolean areAllTheSame(int[][] image) {
    return Arrays.stream(image)
            .flatMapToInt(Arrays::stream)
            .distinct()
            .count() == 1;
}
0 голосов
/ 18 января 2020

Кажется очень неэффективным, если вы хотите проверить, содержит ли многомерный массив только один элемент, вы можете просто взять первый элемент, а затем сравнить его со всеми другими числами, если один не соответствует, вы вернете false

...