массивы в java не имеют потокового метода; возможно, вы имели в виду Arrays.stream(colors)
. IntStream
не имеет никакого способа сделать сравнение, кроме как в естественном порядке. Сначала вы можете сопоставить разницу (abs(i - color)
), но теперь вы удалили искомую информацию (исходный цвет), поэтому она также не будет работать. Давайте возьмем это. Это приводит к следующему коду, который в точности соответствует вашему коду, за исключением того, что он компилируется и запускается. Затем я также добавлю тестовый пример, чтобы сделать его автономным примером:
int[] colors = {1,4,5,9,12};
int target = 6;
int a = Arrays.stream(colors).boxed()
.min(Comparator.comparingInt(i -> Math.abs(i - target)))
.orElseThrow(() -> new NoSuchElementException());
System.out.println(a);
и, ну вот, 5, выпадает, что именно то, что вы хотите.
Другими словами, смысл вашего кода в порядке, если он не дает правильного ответа, ваши входные данные - это не то, о чем вы думали, или что-то еще не так, что нельзя найти из вашей пасты.
Может Я полагаю, что, если вообще возможно поставить вопрос в простой, самодостаточной форме (как этот вопрос явно был, см. Фрагмент кода в этом ответе), что вы это делаете? Часто вы будете отвечать на свои вопросы таким образом:)