首页 > 图灵资讯 > 技术篇>正文

Java函数式编程中递归式数据遍历的技巧

2024-09-29 21:15:43

java 递归数据遍历在函数编程中的技巧:linkedlist 递归遍历:使用 stream.iterate() 创建和使用无限流 foreach() 遍历。tree 递归遍历:使用 optional.ifpresent() 递归遍历、遍历节点及其子节点。实战案例:分析 json 使用递归遍历提取嵌套对象中的子项名称。

Java函数式编程中递归式数据遍历的技巧

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函数编程中递归数据遍历技巧的详细内容。请关注图灵教育的其他相关文章!

上一篇 Java函数式编程递归如何避免栈溢出?
下一篇 返回列表

文章素材均来源于网络,如有侵权,请联系管理员删除。