Java Lambda 表达式与 Stream API 实战 (全网最简洁教程)

java lambda 表达式和 stream api 提升开发效率的核心在于简化代码、增强可读性和实现声明式编程。1. lambda 表达式通过匿名函数形式减少冗余代码,特别是在使用函数式接口时显著提升代码简洁性;2. stream api 提供了流式数据处理能力,支持过滤、映射、排序、归约等操作,并可通过链式调用清晰表达数据处理流程;3. 两者结合使得集合操作更直观高效,减少了手动编写循环和中间变量的需求;4. 常见操作模式包括过滤-映射-收集、分组-聚合和归约操作;5. 在性能方面需注意懒惰求值机制、并行流适用场景、原始类型 stream 的使用以及保持无状态操作;6. 最佳实践包括合理使用链式调用、避免过度设计、采用 peek() 调试 stream 管道,确保代码的可维护性和高效性。

Java Lambda 表达式与 Stream API 实战 (全网最简洁教程)

Java Lambda 表达式和 Stream API 的出现,彻底改变了我们编写数据处理代码的方式。它们让代码更简洁、更具可读性,并且能够以一种声明式的方式表达复杂的逻辑,尤其在处理集合数据时,那种“写循环”的繁琐感一去不复返。说实话,刚接触时可能觉得有点抽象,但一旦上手,你会发现这简直是生产力工具的飞跃。

Java Lambda 表达式与 Stream API 实战 (全网最简洁教程)

解决方案

Lambda 表达式本质上就是匿名函数,它提供了一种非常简洁的方式来表示一个方法。当你需要将一段行为作为参数传递时,比如给一个按钮添加点击事件,或者给一个列表排序,Lambda 就派上用场了。它最常见的应用场景是配合那些只有一个抽象方法的接口(我们称之为函数式接口)。

立即学习“Java免费学习笔记(深入)”;

Java Lambda 表达式与 Stream API 实战 (全网最简洁教程)

// 传统方式:匿名内部类实现 Runnablenew Thread(new Runnable() {    @Override    public void run() {        System.out.println("Hello from traditional thread!");    }}).start();// Lambda 方式:简洁地实现 Runnablenew Thread(() -> System.out.println("Hello from Lambda thread!")).start();// 另一个例子:排序import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;List names = Arrays.asList("Alice", "Bob", "Charlie");// 传统排序Collections.sort(names, new Comparator() {    @Override    public int compare(String s1, String s2) {        return s1.compareTo(s2);    }});System.out.println("Traditional sort: " + names);// Lambda 排序Collections.sort(names, (s1, s2) -> s1.compareTo(s2));System.out.println("Lambda sort: " + names);

Stream API 则是处理集合数据的利器。它提供了一套流式操作,允许你对集合进行过滤、映射、排序、归约等操作,而且这些操作可以像管道一样串联起来,形成一个清晰的数据处理流程。一个 Stream 通常包含三个阶段:

数据源(Source):可以是集合、数组、I/O 通道等。通过 collection.stream()Arrays.stream() 获取。中间操作(Intermediate Operations):这些操作会返回一个新的 Stream,可以链式调用。它们是“懒惰的”,只有当终端操作被调用时才真正执行。常见的有 filter()(过滤)、map()(映射)、sorted()(排序)、distinct()(去重)、limit()(限制数量)、skip()(跳过)。终端操作(Terminal Operations):这些操作会消耗 Stream,产生一个最终结果或副作用。Stream 在终端操作之后就不能再使用了。常见的有 forEach()(遍历)、collect()(收集到集合)、reduce()(归约)、count()(计数)、min()/max()/sum()/average()(统计)、anyMatch()/allMatch()/noneMatch()(匹配)。

Lambda 表达式和 Stream API 常常是配合使用的。Lambda 为 Stream 的中间操作和终端操作提供了简洁的函数体。

Java Lambda 表达式与 Stream API 实战 (全网最简洁教程)

import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;class User {    String name;    int age;    public User(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() { return name; }    public int getAge() { return age; }    @Override    public String toString() { return "User{" + "name='" + name + ''' + ", age=" + age + '}'; }}// 实际应用:过滤、映射、收集List users = Arrays.asList(    new User("Anna", 28),    new User("Ben", 35),    new User("Clara", 22),    new User("David", 30));// 找出所有年龄小于30岁的用户名字,并按字母顺序排序List youngUserNames = users.stream()    .filter(u -> u.getAge() < 30) // 过滤:年龄小于30    .map(User::getName)           // 映射:提取名字 (这里用了方法引用,是Lambda的简写)    .sorted()                     // 排序:按名字字母顺序    .collect(Collectors.toList()); // 收集:将结果收集到List中System.out.println("Young user names: " + youngUserNames); // 输出: [Anna, Clara]// 计算所有用户的平均年龄double averageAge = users.stream()    .mapToInt(User::getAge) // 转换为 IntStream,避免自动装箱拆箱,更高效    .average()               // 计算平均值    .orElse(0.0);            // 如果流为空,则返回0.0System.out.println("Average age: " + averageAge); // 输出: 28.75

为什么 Lambda 表达式和 Stream API 能提升开发效率?它们解决了什么痛点?

讲真,在 Lambda 和 Stream API 出现之前,Java 在处理集合数据时,代码往往显得非常冗长和命令式。你需要手动编写循环(forwhile),手动创建临时变量来存储中间结果,代码的意图被大量的样板代码所掩盖。这不仅增加了代码量,也让代码的可读性和维护性大打折扣。

Lambda 表达式的出现,首先解决了匿名内部类的“啰嗦”问题。想想看,一个简单的事件监听器,以前要写好几行代码,现在一行 Lambda 就能搞定。它让代码更聚焦于“做什么”,而不是“怎么做”,这是一种思维上的转变,从命令式编程向函数式编程迈进了一大步。

Stream API 则更像是为数据处理量身定制的“瑞士军刀”。它把数据处理的逻辑从具体的迭代细节中抽象出来,以一种声明式的方式来描述。你不再关心数据是如何一步步被遍历的,而是直接告诉 Stream 你想要什么:过滤掉哪些、转换成什么、最终收集成什么形式。这种链式调用让整个数据处理流程一目了然,极大地提升了代码的表达力。比如,以前你需要好几个循环才能完成的过滤、转换、排序操作,现在通过 Stream 的几个中间操作就能流畅地串联起来。这种高阶抽象,不仅减少了出错的可能性,也让代码更易于理解和重构。

Stream API 中常见的操作模式有哪些?如何选择合适的终端操作?

Stream API 的操作模式非常丰富,但归纳起来,最核心的几个是:

过滤-映射-收集(Filter-Map-Collect):这是最常见、最基础的模式。你先根据某个条件过滤掉不符合要求的数据,然后将剩余的数据转换成你想要的另一种形式,最后把结果收集到一个新的集合中。

// 过滤出偶数,然后乘以2,最后收集List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);List processedNumbers = numbers.stream()    .filter(n -> n % 2 == 0) // 过滤偶数    .map(n -> n * 2)         // 每个偶数乘以2    .collect(Collectors.toList()); // 收集到ListSystem.out.println("Processed numbers: " + processedNumbers); // 输出: [4, 8, 12]

分组-聚合(Grouping-Aggregating):当你需要根据某个属性对数据进行分类,并对每个分类进行统计或聚合操作时,Collectors.groupingBy() 是你的最佳选择。

// 假设有用户列表,按年龄分组List users = Arrays.asList(new User("A", 20), new User("B", 25), new User("C", 20));Map<Integer, List> usersByAge = users.stream()    .collect(Collectors.groupingBy(User::getAge)); // 按年龄分组System.out.println("Users by age: " + usersByAge); // 输出: {20=[User{name='A', age=20}, User{name='C', age=20}], 25=[User{name='B', age=25}]}

归约(Reduction):当你想把 Stream 中的所有元素合并成一个单一的结果时,reduce() 操作就非常有用。它需要一个初始值(可选)、一个累加器函数和一个组合器函数(用于并行流)。

// 计算所有数字的和List nums = Arrays.asList(1, 2, 3, 4, 5);int sum = nums.stream().reduce(0, (a, b) -> a + b); // 初始值0,累加器相加System.out.println("Sum: " + sum); // 输出: 15

如何选择合适的终端操作?

一键职达 一键职达

AI全自动批量代投简历软件,自动浏览招聘网站从海量职位中用AI匹配职位并完成投递的全自动操作,真正实现’一键职达’的便捷体验。

一键职达 79 查看详情 一键职达

选择终端操作取决于你最终想要什么:

collect(): 这是最常用、最灵活的终端操作,当你需要将 Stream 的结果收集到各种集合(toList(), toSet(), toMap(), toCollection(Supplier))、字符串(joining())、或者进行复杂的聚合(groupingBy(), partitioningBy(), counting(), summingInt() 等)时,都用它。它就像一个多功能瑞士军刀,几乎能满足所有收集需求。forEach(): 当你只是想对 Stream 中的每个元素执行一个副作用操作(比如打印、更新数据库)而不需要返回任何结果时,用它。注意,它没有返回值,所以不能链式调用其他 Stream 操作。reduce(): 当你需要将所有元素“折叠”成一个单一的值时,比如求和、求积、连接字符串等。它比 sum()min() 等更通用。count(): 简单地计算 Stream 中元素的数量。min()/max()/average()/sum(): 用于对数值型 Stream(如 IntStream, LongStream, DoubleStream)进行统计计算。anyMatch()/allMatch()/noneMatch(): 用于检查 Stream 中的元素是否符合某个条件。它们会短路,一旦找到匹配或不匹配,就会立即返回。findFirst()/findAny(): 用于从 Stream 中查找一个元素。findFirst() 保证返回第一个元素(在有序 Stream 中),findAny() 则不保证顺序,在并行 Stream 中可能更快。它们都返回 Optional 类型,以处理流为空的情况。

如果你只是想简单地迭代并执行一些操作,forEach 可能最直接。但如果需要将结果转换成新的数据结构,collect 几乎是你的首选。需要聚合数据,reduce 是强大的通用工具,而特定统计则有更方便的 sum 等。

使用 Lambda 和 Stream API 时有哪些性能考量和最佳实践?

虽然 Lambda 和 Stream API 带来了极大的便利和可读性,但在实际使用中,我们仍然需要考虑一些性能和最佳实践问题,避免踩坑。

性能考量:

懒惰求值(Lazy Evaluation):Stream 的中间操作是“懒惰的”,它们并不会立即执行。只有当终端操作被调用时,整个 Stream 管道才会真正开始执行。这意味着如果你定义了一个很长的 Stream 链,但最终没有调用终端操作,那么中间的计算根本不会发生。这个特性非常重要,因为它允许 Stream 管道进行优化,例如短路操作(limit(), anyMatch() 等)可以在找到结果后立即停止处理,从而节省大量计算资源。

// 这个filter和map操作不会执行,因为没有终端操作Stream.of(1, 2, 3, 4, 5).filter(n -> {    System.out.println("filtering: " + n);    return n % 2 == 0;}).map(n -> {    System.out.println("mapping: " + n);    return n * 10;});// 如果加上 .forEach(System.out::println); 就会看到输出

并行流(Parallel Streams):Stream API 提供了 parallelStream() 方法,可以方便地将串行流转换为并行流,从而利用多核 CPU 进行并行处理。听起来很美,但并非总是更快。并行流的性能提升取决于数据量、操作类型以及硬件。对于小数据集,并行化的开销(线程管理、数据分片合并)可能大于收益,反而变慢。此外,如果 Stream 操作中包含有状态或非线程安全的代码,并行流可能会导致意想不到的错误。一般来说,只有当数据量非常大,且操作是 CPU 密集型时,才考虑使用并行流,并且要确保操作是无状态的。

原始类型 Stream(Primitive Streams):Java 为 int, long, double 提供了专门的 Stream 版本:IntStream, LongStream, DoubleStream。使用它们可以避免自动装箱和拆箱的性能开销。当你处理大量原始数值数据时,优先使用这些特化 Stream。

List integers = Arrays.asList(1, 2, 3);// 避免装箱拆箱int sum = integers.stream().mapToInt(Integer::intValue).sum();

最佳实践:

保持操作的无状态性(Stateless Operations):Stream 的中间操作应该是无状态的,即它们的执行不依赖于任何外部可变状态,也不应该修改外部状态。这对于并行流尤其重要,否则可能导致非预期结果。例如,在 filtermap 中修改一个外部计数器是危险的。

// 错误示例:有状态的LambdaList numbers = Arrays.asList(1, 2, 3, 4);int[] sum = {0}; // 外部可变状态numbers.stream().forEach(n -> sum[0] += n); // 修改外部状态System.out.println(sum[0]); // 在并行流中可能不准确

正确做法是使用 reducecollect 来聚合。

链式调用,清晰表达意图:Stream API 的优势在于其链式调用能力。将一系列操作清晰地串联起来,可以非常直观地表达数据处理的逻辑。但也要注意,不要过度链式调用导致一行代码过长,适当分行可以提高可读性。

适度使用,避免过度设计:并非所有的循环都必须转换为 Stream。对于非常简单的循环,例如仅仅遍历打印,传统的 for-each 循环可能更直观、更易于理解。Stream 适用于复杂的、多步骤的数据转换和聚合。在追求“时髦”的同时,不要牺牲代码的直观性和可维护性。

调试技巧:Stream 管道的调试可能比传统循环更复杂,因为它是惰性求值的。可以使用 peek() 中间操作来在 Stream 管道的特定点插入一个副作用操作(比如打印),以观察数据流经该点时的状态。

List names = Arrays.asList("a", "b", "c");names.stream()    .filter(s -> {        System.out.println("filtering: " + s);        return true;    })    .peek(s -> System.out.println("after filter: " + s)) // 观察过滤后的数据    .map(String::toUpperCase)    .peek(s -> System.out.println("after map: " + s))    // 观察映射后的数据    .collect(Collectors.toList());

总之,Lambda 表达式和 Stream API 是现代 Java 开发中不可或缺的工具。掌握它们不仅能让你的代码更优雅,也能显著提升开发效率。在实践中多思考、多尝试,很快就能体会到它们带来的便利。

以上就是Java Lambda 表达式与 Stream API 实战 (全网最简洁教程)的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
win10 edge兼容模式在哪?
上一篇 2025年11月4日 04:10:20
《超级机器人大战Y》试玩前瞻 辅助连结系统带来全新维度
下一篇 2025年11月4日 04:10:25

相关推荐

  • 夸克浏览器如何快速清理浏览数据_夸克浏览器数据清理的实用技巧

    夸克浏览器如何快速清理浏览数据_夸克浏览器数据清理的实用技巧夸克浏览器如何快速清理浏览数据_夸克浏览器数据清理的实用技巧夸克浏览器如何快速清理浏览数据_夸克浏览器数据清理的实用技巧夸克浏览器如何快速清理浏览数据_夸克浏览器数据清理的实用技巧

    首先通过设置菜单全面清理浏览数据,包括历史记录、缓存和Cookie;其次使用一键清理工具快速释放空间;还可单独清除特定数据类型;最后启用自动清理机制减少手动操作,保持设备流畅。 如果您在使用夸克浏览器时发现设备存储空间不足或浏览速度变慢,很可能是由于累积了过多的浏览数据。以下是几种快速清理夸克浏览器…

    2026年9月24日 用户投稿
    000
  • 抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法

    抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法抖音辅助账号上限怎么解除?抖音辅助账号上限解除最简单方法

    在如今火爆的短视频领域,抖音已成为众多内容创作者和商家运营的首选平台。为了实现更高效的推广与内容分发,不少人选择使用辅助账号来配合主账号运营。然而,“抖音辅助账号上限”这一问题常常让用户感到困扰。本文将为你全面解析抖音辅助账号上限怎么解除,并分享最实用、最简单的解决策略,助你轻松突破限制,玩转抖音生…

    2026年9月24日 用户投稿
    000
  • 战斗回放精通指南:从录制到复盘的全流程战术手册

    战斗回放精通指南:从录制到复盘的全流程战术手册战斗回放精通指南:从录制到复盘的全流程战术手册战斗回放精通指南:从录制到复盘的全流程战术手册战斗回放精通指南:从录制到复盘的全流程战术手册

    想要成为顶尖的战术高手?精通对局回放功能是不可或缺的关键一步!本指南将为你全面解析战斗录像的录制与复盘技巧,把每一场对局转化为提升实力的宝贵资源——无论你是为了优化走位细节、剖析对手策略,还是带领团队突破瓶颈,战斗回放都将成为你最强大的幕后教练! 第一步:打好基础 – 激活你的战场记录仪…

    2026年9月24日 用户投稿
    000
  • sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置

    sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置sublime怎么设置markdown的图片预览_sublime Markdown图片预览设置

    Sublime Text需安装插件实现Markdown图片预览:1. 通过Package Control安装MarkdownEditing、MarkdownPreview或OmniMarkupPreviewer;2. 使用MarkdownPreview在浏览器中预览,确保图片路径正确;3. Omni…

    2026年9月24日 用户投稿
    000
  • ubuntu compton提高分辨率技巧

    在ubuntu系统中,compton是一个常用的合成器,用于实现窗口的透明度和阴影效果。然而,compton本身并不直接提供调整分辨率的功能。分辨率的调整通常与显示管理器(如lightdm)或桌面环境(如gnome)的显示设置相关。以下是一些提高分辨率的技巧: 通过显示管理器调整分辨率 使用Ligh…

    2026年9月24日
    000
  • windows11的emoji表情面板快捷键是什么_windows11打开emoji表情的方法

    windows11的emoji表情面板快捷键是什么_windows11打开emoji表情的方法windows11的emoji表情面板快捷键是什么_windows11打开emoji表情的方法windows11的emoji表情面板快捷键是什么_windows11打开emoji表情的方法windows11的emoji表情面板快捷键是什么_windows11打开emoji表情的方法

    可通过快捷键Win+.调出表情符号面板,在任务栏设置中开启“表情符号及更多”按钮,或通过触摸屏长按输入区、鼠标右键菜单等方式快速插入表情符号和特殊字符。 如果您想在Windows 11中快速插入表情符号或特殊字符,但不确定如何调出相关面板,则可以通过系统提供的多种方式实现。以下是具体的操作方法: 本…

    2026年9月24日 用户投稿
    000
  • UC浏览器下载的压缩包怎么打开_UC浏览器直接解压ZIP或RAR文件教程

    UC浏览器下载的压缩包怎么打开_UC浏览器直接解压ZIP或RAR文件教程UC浏览器下载的压缩包怎么打开_UC浏览器直接解压ZIP或RAR文件教程UC浏览器下载的压缩包怎么打开_UC浏览器直接解压ZIP或RAR文件教程UC浏览器下载的压缩包怎么打开_UC浏览器直接解压ZIP或RAR文件教程

    首先尝试用UC浏览器预览压缩包内容,若需完整解压则安装ZArchiver等工具,或使用系统文件管理器自带的ZIP解压功能。 如果您在使用UC浏览器下载了ZIP或RAR格式的压缩包,但无法直接查看其中的内容,可能是因为浏览器本身不支持完整的解压功能。此时需要借助系统自带或第三方工具完成解压操作。 本文…

    2026年9月24日 用户投稿
    200
  • 多模态AI如何处理射电望远镜数据 多模态AI深空探测应用

    多模态AI如何处理射电望远镜数据 多模态AI深空探测应用多模态AI如何处理射电望远镜数据 多模态AI深空探测应用多模态AI如何处理射电望远镜数据 多模态AI深空探测应用多模态AI如何处理射电望远镜数据 多模态AI深空探测应用

    多模态ai通过融合多种数据提升射电望远镜数据分析能力。它将无线电信号转化为频谱图、时间序列等形式,并结合光学图像等信息综合判断信号频率、强度、出现时间与方向;1.时空对齐匹配不同设备数据;2.特征级融合提取关键特征;3.决策级融合综合多个模型结果;实际应用于“突破聆听计划”筛选射电信号,面临数据格式…

    2026年9月24日 用户投稿
    200
  • 二手车视频号直播怎么挂载?直播挂载有影响吗?

    二手车视频号直播怎么挂载?直播挂载有影响吗?二手车视频号直播怎么挂载?直播挂载有影响吗?二手车视频号直播怎么挂载?直播挂载有影响吗?二手车视频号直播怎么挂载?直播挂载有影响吗?

    视频号直播中的挂载功能,是推动二手车销售转化的核心利器。通过精准配置商品链接、小程序或留资表单,主播可高效引导观众完成从观看到咨询、下单的全过程。那么,具体该如何操作呢? 一、二手车视频号直播如何实现挂载? 开通直播权限 确保你的视频号已完成实名认证,并满足平台对粉丝数或活跃度的基本要求。进入视频号…

    2026年9月24日 用户投稿
    300
  • MAC外接显示器没有反应_Mac外接显示器连接与故障排除

    首先检查连接线缆和接口是否正常,确认显示器电源及输入源设置正确;通过系统设置中的“检测显示器”功能强制识别;调整分辨率与刷新率为显示器兼容值;重置NVRAM/SMC以清除错误配置;使用安全模式排除软件冲突;最后更新macOS和显示器固件至最新版本。 如果您已将Mac连接至外接显示器,但屏幕显示“无信…

    2026年9月24日
    000
  • 手机淘宝怎么上拍品?手机淘宝怎么上拍品视频

    手机淘宝怎么上拍品?手机淘宝怎么上拍品视频手机淘宝怎么上拍品?手机淘宝怎么上拍品视频手机淘宝怎么上拍品?手机淘宝怎么上拍品视频手机淘宝怎么上拍品?手机淘宝怎么上拍品视频

    首先打开手机淘宝进入“我是商家”,通过“发布宝贝”填写信息并上传图片完成商品发布;接着在“素材中心”上传不超过500MB的MP4格式视频,并将视频链接插入商品详情;也可使用千牛App,在发布商品时直接添加视频,确保封面清晰,最后提交发布即可。 如果您想在手机淘宝上发布商品或上传拍品视频,但不清楚具体…

    2026年9月24日 用户投稿
    200
  • UC浏览器如何设置默认下载工具_UC浏览器调用第三方下载器设置方法

    UC浏览器如何设置默认下载工具_UC浏览器调用第三方下载器设置方法UC浏览器如何设置默认下载工具_UC浏览器调用第三方下载器设置方法UC浏览器如何设置默认下载工具_UC浏览器调用第三方下载器设置方法UC浏览器如何设置默认下载工具_UC浏览器调用第三方下载器设置方法

    首先开启UC浏览器的第三方下载权限,进入设置→下载设置→启用“使用第三方下载工具”;然后在默认下载工具中选择目标应用如IDM+或ADM;若未显示可选应用需确认安装并刷新列表;还可通过系统设置→应用管理→默认应用→下载管理器中指定默认下载器;对于不支持直接绑定的版本,可用Tasker或Auto.js等…

    2026年9月24日 用户投稿
    100
  • 怎样备份和恢复Debian邮件服务器数据

    备份和恢复debian邮件服务器数据的方法取决于邮件服务器的具体配置和使用的软件。以下是一些通用的步骤和建议: 壁纸样机神器 免费壁纸样机生成 0 查看详情 备份步骤 确定备份内容:首先,确定需要备份的数据类型,例如邮件内容、用户信息、配置文件等。使用备份工具:根据邮件服务器的软件选择合适的备份工具…

    2026年9月24日
    100
  • 袋鼠数据库工具 8.90.1 版已上线

    袋鼠数据库工具 8.90.1 版已上线袋鼠数据库工具 8.90.1 版已上线袋鼠数据库工具 8.90.1 版已上线袋鼠数据库工具 8.90.1 版已上线

    袋鼠数据库工具 是一款由 ai 驱动的主流数据库系统客户端,支持多种数据库类型,包括 mariadb、mongodb、mysql、oracle、postgresql、redis、sqlite、sqlserver 等,具备建表、数据查询、模型设计、结构同步、数据导入导出等丰富功能。兼容 windows…

    2026年9月24日 用户投稿
    000
  • 使用 Appium 实现 Gmail OTP 验证自动化

    使用 Appium 实现 Gmail OTP 验证自动化使用 Appium 实现 Gmail OTP 验证自动化使用 Appium 实现 Gmail OTP 验证自动化使用 Appium 实现 Gmail OTP 验证自动化

    本文档旨在指导开发者如何使用 Appium 自动化测试移动应用中的 Gmail OTP (One-Time Password) 验证流程。我们将探讨如何通过 Appium 定位 OTP 输入框,并使用获取到的 OTP 值进行输入,从而完成验证流程的自动化。 定位 OTP 输入框 在 Appium 中…

    2026年9月24日 用户投稿
    200
  • Java程序Ubuntu上如何备份

    在ubuntu上备份java程序,你可以遵循以下步骤: 确定备份位置:首先,你需要确定一个安全的位置来存储备份文件。这可以是一个外部硬盘、网络驱动器或其他任何可靠的存储设备。 打包Java项目:你可以使用tar命令将整个Java项目打包成一个压缩文件。例如,如果你的项目位于/home/usernam…

    2026年9月24日
    000
  • 抖音怎么看直播回放?小米14抖音怎么看别人的直播回放

    短视频平台已成为现代生活的重要组成部分。抖音作为国内领先的短视频平台,凭借其独特的直播功能吸引了众多用户。然而,有时因时间冲突等原因未能及时观看直播,令人遗憾。本文将为您深入解析抖音直播回放功能,助您不错过任何精彩瞬间。 一、抖音直播回放的优势 1. 再次欣赏 通过抖音直播回放,用户可在直播结束后随…

    2026年9月24日
    000
  • AI工具+自动发布系统:打造不熬夜的新媒体工作流

    AI工具+自动发布系统:打造不熬夜的新媒体工作流AI工具+自动发布系统:打造不熬夜的新媒体工作流AI工具+自动发布系统:打造不熬夜的新媒体工作流AI工具+自动发布系统:打造不熬夜的新媒体工作流

    ai工具和自动发布系统能高效提升新媒体运营效率,解放时间和精力。①ai可生成文案、分析数据、优化内容;②自动发布系统支持定时发布,避免遗漏;③选择ai工具需明确需求、试用对比;④使用时注意平台兼容性、账号安全;⑤配合标准化流程、批量处理等技巧,兼顾质量与效率。 ☞☞☞AI 智能聊天, 问答助手, A…

    2026年9月24日 用户投稿
    000
  • FydeOS v21 发布,升级至 r138,更强的启动器、即圈即搜和无障碍功能

    FydeOS v21 发布,升级至 r138,更强的启动器、即圈即搜和无障碍功能FydeOS v21 发布,升级至 r138,更强的启动器、即圈即搜和无障碍功能FydeOS v21 发布,升级至 r138,更强的启动器、即圈即搜和无障碍功能FydeOS v21 发布,升级至 r138,更强的启动器、即圈即搜和无障碍功能

    我们隆重推出 FydeOS v21:Sunlit Epiphany 正式版本!此次发布带来了众多全新功能、更流畅的操作体验以及更强的系统稳定性——致力于为你打造更加高效且精致的使用感受。本次更新还将底层 Chromium OS 从 r132 升级至 r138,让你第一时间获得最新的性能优化与安全补丁…

    2026年9月24日 用户投稿
    000
  • windows怎么查看端口被哪个进程占用_查看端口占用进程的方法

    windows怎么查看端口被哪个进程占用_查看端口占用进程的方法windows怎么查看端口被哪个进程占用_查看端口占用进程的方法windows怎么查看端口被哪个进程占用_查看端口占用进程的方法windows怎么查看端口被哪个进程占用_查看端口占用进程的方法

    使用netstat命令可查端口占用,通过PID和tasklist找到对应进程;2. PowerShell用Get-NetTCPConnection和Get-Process获取进程详情;3. 资源监视器图形化查看监听端口及进程名;4. 第三方工具TcpView实时显示并管理端口占用。 如果您在使用Wi…

    2026年9月24日 用户投稿
    100

发表回复

登录后才能评论
关注微信