У меня есть код компаратора для сортировки по полю Foo.
List<Identity> myList = someValues....
//From RestController - sortMyList().accept(myList);
private Consumer<List<Identity> sortMyList() {
return myList-> myList.sort((o1,o2) -> compareByFoo().apply(o1,o2));
}
и, наконец, определение функции compareByFoo как
foo = "Some IntegerValue;yyyy-mm-dd hh:mm:ss:ms" => thats why someFunctionWhichTellsWhichisGreater
private BiFunction<Identity,Identity,Integer> compareByFoo(){
return (o1,o2) -> {
String value1 = o1.getFoo();
String value2 = o2.getFoo();
someFunctionWhichTellsWhichisGreater()apply(value1,value2);
}
}
Сортировка происходит в служебном коде, который вызывается из контроллера REST.
При нормальной рабочей нагрузке этот компаратор работает нормально. Но в сценарии тестирования производительности с 6 параллельными вызовами он выдает
NULLpointerException at
String value2 = o2.getFoo(); Essentially o2 is null
Есть ли какие-либо недостатки использования Consumer или BiFunction, которые я пропустил?
Трассировка стека:
java.lang.NullpointerException at.... custom package....
at java.util.TimSort.countRunAndMakeAscending(TimSort.java:366) ~[?:1.8.0]
at java.util.TimSort.sort(TimSort.java:231) ~[?:1.8.0]
at java.util.Arrays.sort(Arrays.java:1856) ~[?:1.8.0]
at java.util.ArrayList.sort(ArrayList.java:1473) ~[?:1.8.0]