Я использовал потоковый подход, чтобы уменьшить - List<Map<String,String>>
до List<CustomObject>
. Следующий код был использован для потока
List<Map<String,String>> mailVariable = (List<Map<String, String>>) processVariables.get("MAIL_MAP");
1| List<CustomObject> detList = mailVariable
2| .stream()
3| .flatMap(getEntry)
4| .filter (isEmpty)
5| .reduce(new ArrayList<CustomObject>(),accumulateToCustomObject,combiner);
Я анализировал свой код с помощью sonarLint и получил следующую ошибку в строке 2 и 3
Рефакторинг этого кода, чтобы поток конвейер используется. squid: S3958
Я использую поток и получаю значение из операции терминала, как предложено здесь . Что-то я делаю не так? Может ли кто-нибудь предложить правильный способ написания этого кода?
// following are the functional interface impls used in the process
Function<Map<String,String>, Stream<Entry<String,String>>> getEntry = data -> data.entrySet().stream();
Predicate<Entry<String, String>> isEmpty = data -> data.getValue() != null
|| !data.getValue().isEmpty()
|| !data.getValue().equals(" ");
BinaryOperator<ArrayList<CustomObject>> combiner = (a, b) -> {
ArrayList<CustomObject> acc = b;
acc.addAll(a);
return acc;
};
BiFunction<ArrayList<CustomObject>,Entry<String,String>,ArrayList<CustomObject>> accumulateToCustomObject = (finalList, eachset) -> {
/* reduction process happens
building the CustomObject..
*/
return finalList;
};