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

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 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 names = new ArrayList();        traverse(json.get("children"), names);        // 打印子项名称        for (String name : names) {            System.out.println(name);        }    }    private static void traverse(JsonElement element, List names) {        if (element.isJsonObject()) {            JsonObject obj = element.getAsJsonObject();            names.add(obj.get("name").getAsString());            traverse(obj.get("children"), names);        }    }}

登录后复制

以上就是Java函数式编程中递归式数据遍历的技巧的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3039488.html

(0)
上一篇 2025年3月13日 11:09:17
下一篇 2025年3月12日 00:16:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用Vue表单处理实现表单的递归嵌套

    如何使用Vue表单处理实现表单的递归嵌套 引言:随着前端数据处理和表单处理的复杂性不断增加,我们需要通过一种灵活的方式来处理复杂的表单。Vue作为一种流行的JavaScript框架,为我们提供了许多强大的工具和特性来处理表单的递归嵌套。本文…

    2025年3月13日
    200
  • 基础的JavaScript知识总结(七)递归

    这次给大家带来基础的javascript知识总结,总共有十一个知识点,基础的javascript知识总结(七)递归下面就是实战案例,一起来看一下。 写一个函数实现n的阶乘 n! = n*(n-1)!;    function mul (n)…

    编程技术 2025年3月8日
    200
  • 关于JS时间对象和递归问题

    js时间对象和递归在学习中经常会遇到,本篇将对其进行讲解。 基础类型有哪些?复杂类型有哪些?有什么特征?一般来说JS的基础类型主要分为5种,指的是保存在栈内存中的简单数据段; 数字:number 布尔值:true、false 字符串:str…

    编程技术 2025年3月8日
    200
  • JS累加、迭代、穷举、递归等常用算法使用总结

    这次给大家带来JS累加、迭代、穷举、递归等常用算法使用总结,JS累加、迭代、穷举、递归等常用算法使用的注意事项有哪些,下面就是实战案例,一起来看一下。 累加和累积 累加:将一系列的数据加到一个变量里面。最后的得到累加的结果 比如:将1到10…

    编程技术 2025年3月8日
    200
  • 系统整理js递归函数的应用及对递归爆栈问题的解决

    在学习js时,递归这块内容是挺杂乱的,所以据此我给大家整理了关于递归的相关内容,文章通过案例代码介绍的较为详细,会对大家的学习有一定的帮助,在文章开始我先介绍了递归的基础内容,让大家有个知识概念,这样后面的学习不会一头雾水,后面列举了使用递…

    编程技术 2025年3月8日
    200
  • js中节流函数的使用方法(附实例代码)

    本篇文章给大家带来的内容是关于js中节流函数的使用方法(附实例代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、前言 不知道大家是否遇到过这样一个问题,对于一些函数或者事件它们能够频繁地触发,比如说下面的滚动事件,…

    2025年3月8日
    200
  • 函数式编程的介绍和归纳总结(附代码)

    最近在看函数式编程入门经典,自己总结归纳了一下,感兴趣或者有需要的可以看一下。 1.、什么是函数式编程 函数式编程主要是基于数学函数和它的思想,那么我们先复习一下数学中的函数即y = f(x)即函数 f(x) 以 x 为参数,以 y 为结果…

    编程技术 2025年3月8日
    200
  • javascript的函数组合与柯里化的详解(附示例)

    本篇文章给大家带来的内容是关于javascript的函数组合与柯里化的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 我们都知道单一职责原则,其实面向对象的SOLID中的S(SRP, Single respo…

    2025年3月8日
    200
  • 递归是什么?javascript中递归的详解

    本篇文章给大家带来的内容是关于递归是什么?javascript中递归的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1. 递归是啥? 递归概念很简单,“自己调用自己”(下面以函数为例)。 在分析递归之前,需要了解下 …

    2025年3月8日
    200
  • JavaScript中函数式编程是什么?函数式编程的介绍

    本篇文章给大家带来的内容是关于javascript中函数式编程是什么?函数式编程的介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 是个程序员都知道函数,但是有些人不一定清楚函数式编程的概念。 应用的迭代使程序变得越来越…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论