首页 > 图灵资讯 > 技术篇>正文
Java函数式编程中递归式数据遍历的技巧
2024-09-29 21:15:43
java 递归数据遍历在函数编程中的技巧:linkedlist 递归遍历:使用 stream.iterate() 创建和使用无限流 foreach() 遍历。tree 递归遍历:使用 optional.ifpresent() 递归遍历、遍历节点及其子节点。实战案例:分析 json 使用递归遍历提取嵌套对象中的子项名称。
Java 递归数据遍历在函数编程中的技能
函数编程为处理递归数据结构提供了强大的工具,如链表和树木。这些结构包括通过递归分解数据,并在每个子部分进行操作。
LinkedList 的递归遍历
立即学习“Java免费学习笔记(深入);
Stream.iterate() 该方法可以创建和使用无限流 forEach() 该方法操作。该示例显示了如何遍历并打印链表:
class Node { int data; Node next; } public class LinkedListTraversal { public static void main(String[] args) { // 创建链表 Node head = new Node(); head.data = 1; head.next = new Node(); head.next.data = 2; head.next.next = new Node(); head.next.next.data = 3; // 递归遍历链表 Stream.iterate(head, Node::getNext) // 创建无限流 .forEach(node -> System.out.println(node.data)); // 遍历流并打印数据 } }
Tree 的递归遍历
树的结构可以表示为嵌套对象,每个节点都包含对子节点的引用。使用 Optional.ifPresent() 递归遍历的示例如下:
class TreeNode { int data; List<TreeNode> children; } public class TreeTraversal { public static void main(String[] args) { // 创建树 TreeNode root = new TreeNode(); root.data = 1; root.children = List.of( new TreeNode(2), new TreeNode(3), new TreeNode(4) ); root.children.get(0).children = List.of(new TreeNode(5)); root.children.get(2).children = List.of(new TreeNode(6)); // 递归遍历树 traverse(root); } private static void traverse(TreeNode node) { if (node == null) return; System.out.println(node.data); for (TreeNode child : node.children) { traverse(child); } } }
实战案例
考虑以下 JSON 数据:
{ "name": "John", "age": 30, "children": [ { "name": "Alice", "age": 10 }, { "name": "Bob", "age": 12 } ] }
所有子项的名称都可以通过使用递归遍历轻松提取:
import com.google.gson.Gson; class Main { public static void main(String[] args) { // 将 JSON 对象进行数据分析 JsonObject json = new Gson().fromJson(jsonStr, JsonObject.class); // 递归提取子项名称 List<String> names = new ArrayList<>(); traverse(json.get("children"), names); // 打印子项名称 for (String name : names) { System.out.println(name); } } private static void traverse(JsonElement element, List<String> names) { if (element.isJsonObject()) { JsonObject obj = element.getAsJsonObject(); names.add(obj.get("name").getAsString()); traverse(obj.get("children"), names); } } }
以上是Java函数编程中递归数据遍历技巧的详细内容。请关注图灵教育的其他相关文章!