I want to optimize following code:
List<Integer> numbers = Arrays.asList(5, 3, 2, 8);
// sorted Array of all numbers>2
Arrays.asList(sortWithCondition(numbers, i -> i > 2)).forEach(
data -> System.out.println("MM=" + data));
public static Integer[] sortWithCondition(List<Integer> numbers,
Predicate<Integer> predicate) {
IntStream intStream = numbers.parallelStream().filter(predicate)
.mapToInt(i -> i).sorted();
Object[] objArray = intStream.boxed().collect(Collectors.toList())
.toArray();
Integer[] intArray = new Integer[objArray.length];
for (int j = 0; j < intArray.length; j++) {
intArray[j] = (Integer) objArray[j];
}
return intArray;
}
}
Output: MM=3 MM=5 MM=8
I want to sort number if particular condition satisfied.
How to convert Stream<Integer> to Integer[] directly?
and
How to convert IntStream to Integer[] directly?
Arrays.copyOf(objArray, objArray.length, Integer[].class)to getInteger[]. But your entire code bears several unnecessary steps. You can replace the entire method withreturn .toArray(Integer[]::new);; forget about parallel stream, your list is way too small to get an advantage from parallel processing. Or replace the entire code withnumbers.stream().filter(predicate).sorted().forEachOrdered(data -> System.out.println("MM=" + data));stream()withparallelStream(). You may try both and measure to find out whether there is a benefit.