Каков правильный способ использования lambdas для рекурсивного метода? Я пытаюсь написать рекурсивную функцию поиска глубины для диаграммы . Я пробовал реализовать Lambda-версию, но не уверен, что моя реализация - правильный способ ее использования в рекурсивной функции.реализация Java 8 для рекурсивного метода
Структура кода:
а) старинке
private void depthFirstSearch(final Graph graph, final int sourceVertex){
count++;
marked[sourceVertex]= true;
for(int vertex:graph.getAllVerticesConnectedTo(sourceVertex)){
if(marked[vertex]!=true){
edgeTo[vertex]=sourceVertex;
depthFirstSearch(graph,vertex);
}
}
}
б) Java 8 Лямбда путь:
private void depthFirstSearchJava8(final Graph graph, final int sourceVertex){
count++;
marked[sourceVertex]= true;
StreamSupport.stream(graph.getAllVerticesConnectedTo(sourceVertex).spliterator(),false)
.forEach(vertex -> {
if(marked[vertex]!=true){
edgeTo[vertex]=sourceVertex;
depthFirstSearchJava8(graph,sourceVertex);
}
});
}
Я попытался написать лямбда-версия, как указано выше, но не могла понять преимущества он обеспечивает по сравнению с традиционным способом.
Благодаря
только для примечания: если вам нужно положить в свою лямбду более одной строки, это, вероятно, плохой дизайн для использования лямбда – ByeBye
Если ваш 'graph.getAllVerticesConnectedTo (sourceVertex)' возвращает 'Iterable', то в чем смысл этого' StreamSupport.stream (blahblah) '? Интерфейс 'Iterable' уже имеет' forEach'. –
@TagirValeev: Спасибо за ваш ценный ответ. Все еще в процессе изучения лямбда, так что он не смог его обнаружить. –