Подтвердить что ты не робот

Массив массива Java 8 с использованием лямбда

У меня есть double[], и я хочу отфильтровать (создать новый массив без) отрицательные значения в одной строке без добавления циклов for. Возможно ли это с использованием лямбда-выражений Java 8?

В python это будет использование генераторов:

[i for i in x if i > 0]

Можно ли сделать что-то подобное в Java 8?

4b9b3361

Ответ 1

Да, вы можете сделать это, создав DoubleStream из массива, отфильтровывая негативы и преобразовывая поток обратно в массив. Вот пример:

double[] d = {8, 7, -6, 5, -4};
d = Arrays.stream(d).filter(x -> x > 0).toArray();
//d => [8, 7, 5]

Если вы хотите отфильтровать массив ссылок, который не является Object[], вам нужно будет использовать метод toArray, который принимает IntFunction, чтобы получить в результате получается массив исходного типа:

String[] a = { "s", "", "1", "", "" };
a = Arrays.stream(a).filter(s -> !s.isEmpty()).toArray(String[]::new);