Помогите с RuntimeException. Входной массив должен содержать хотя бы одну четверку, иначе в методе необходимо выбросить RuntimeException Java

public class NewArray {
    public static void main(String[] args) {
        int[] sourceArray = {1, 2, 4, 4, 2, 3, 1, 4, 1, 7};
        resultArray(sourceArray);
    }

    public static void resultArray(int[] sourceArray) {`введите сюда код`
        // Искомое число
        int searchedNumber = 4;

        // Получаем числа из массива после искомого числа в обратном порядке
        int[] reverseArray = IntStream.range(0, sourceArray.length)
                // Обходим индексы массива в обратную сторону
                .map(i -> sourceArray.length - 1 - i)
                // Элементы массива
                .map(i -> sourceArray[i])
                // Пока не встретили искомый элемент
                .takeWhile(i -> i != searchedNumber)
                // Выгружаем в массив
                .toArray();

        // Разворачиваем массив
        int[] resultArray = IntStream.range(0, reverseArray.length)
                // Обходим индексы массива в обратную сторону
                .map(i -> reverseArray.length - 1 - i)
                // Элементы массива
                .map(i -> reverseArray[i])
                // Выгружаем в массив
                .toArray();
        // Выводим результат
        System.out.println(Arrays.toString(resultArray));
    }
}

Ответы (3 шт):

Автор решения: Павел Ериков

Например можно сделать так:

int firstIndex = IntStream.range(0, sourceArray.length)
        .filter(i -> searchedNumber == sourceArray[i])
        .findFirst()
        .orElse(-1);
    
if(firstIndex == -1)
    throw new RuntimeException("Массив должен содержать минимум 1 четверку");

То есть мы находим индекс первого вхождения searchedNumber в массиве sourceArray. Если такого элемента в массиве нет, то возвращаем -1. Ну а дальше проверку просто делаем. По факту код выше это аналог функции indexOf.

→ Ссылка
Автор решения: Дмитрий

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

import java.util.Arrays;
import java.util.stream.IntStream;

public class NewArray {

    public static void main(String[] args) {
        int searchedNumber = 4;
        int[] sourceArray = {1, 2, 4, 4, 2, 3, 1, 4, 1, 7};
        int[] result = resultArray(sourceArray, searchedNumber);
        System.out.println(Arrays.toString(result));
    }

    public static int[] resultArray(int[] sourceArray, int searchedNumber) {
        
        int index = IntStream.range(0, sourceArray.length)
                .map(i -> sourceArray.length - 1 - i)
                .filter(i->sourceArray[i]==searchedNumber)
                .findFirst().orElseThrow(()->new RuntimeException());
        
        int[] result = new int[sourceArray.length-index-1];
        System.arraycopy(sourceArray, index+1, result, 0, sourceArray.length-index-1);
        return result;
        
    }
    
}
→ Ссылка
Автор решения: Александр Киласония
int firstIndex = IntStream.range(0, sourceArray.length)
        .filter(i -> searchedNumber == sourceArray[i])
        .findFirst()
        .orElse(-1);`введите сюда код`
    
if(firstIndex == -1)
    throw new RuntimeException("Массив должен содержать минимум 1 четверку");
→ Ссылка