原来 Java8 Stream 中的排序是插入排序

JAVA8、Steam、list运用合集 java8 阅读详情

写了小程序,验证 Java8 Steam sort是如何实现


package com.pnp.tryJ8col;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
    public static void main(String[] args) {
    	
    	Stream.of("3", "1", "5", "4", "2")
        .sorted((s1, s2) -> {
            System.out.printf("sort: %s; %s\n", s1, s2);
            return s1.compareTo(s2);
        })
        .map(s -> {
            System.out.println("map: " + s);
            return s;
        })
        .forEach(s -> System.out.println("forEach: " + s));
    }
}

输出结果如下:

sort: 1; 3
sort: 5; 1
sort: 5; 3
sort: 4; 3
sort: 4; 5
sort: 2; 4
sort: 2; 3
sort: 2; 1
map: 1
forEach: 1
map: 2
forEach: 2
map: 3
forEach: 3
map: 4
forEach: 4
map: 5
forEach: 5


结论:

1) sort 完结后,管道才继续执行

2) sort是插入排序(从元素比较的顺序可以看出,插入位置通过二分搜索寻找)

Java面试要点53 - Java List的排序算法 Java List的排序机制提供了丰富的API和灵活的实现方式,能够满足各种复杂的排序需求。从最基本的Collections.sort()到现代的Stream API,从自然排序到自定义比较器,Java为开发者提供了完整的排序工具集。在实际开发中,需要根据具体场景选择合适的排序方式:对于简单的数值或字符串排序,可以直接使用自然排序;对于复杂的对象排序,可以使用Comparator提供的灵活方法;对于需要结合其他数据处理操作的场景,可以选择Stream API的方式。 阅读详情

相关推荐

Java 8 Lambda与Stream API:集合排序从命令式到声明式的演进与实践

在Java开发中,集合排序是数据处理的基础操作,其核心在于比较逻辑的定义与执行。传统方式依赖Comparable接口和Comparator匿名内部类,通过命令式编码实现排序规则,但代码冗长且容易出错。Java 8引入的Lambda表达式和函数式编程范式,将排序行为抽象为函数式接口,实现了向声明式编程的转变,显著提升了代码的可读性和表达力。结合Stream API的sorted操作,开发者可以在流式处理中无缝集成排序逻辑,支持多级排序、空值处理和性能优化,极大地增强了数据处理的灵活性与效率。本文聚焦List排

weixin_34356555的博客 383

Stream—sort排序(二)

List<Student> list = new ArrayList<>(); Student s1 = new Student("zhangsan","beijing",30,90.0); list.add(s1); Student s2 = new Student("lisi","shanghai",29,80.8); list.add(s2); Stud...

cdw_sunshine的博客 1万+

Java ArrayList排序全解析:从基础API到Java 8实战与性能优化

在Java开发中,集合排序是数据处理的核心基础操作,它直接关系到数据检索效率和业务逻辑的清晰度。其原理主要基于比较排序算法,Java标准库提供了稳定高效的TimSort实现。从技术价值看,掌握排序不仅能提升代码性能,更是理解对象比较、算法稳定性和API设计的重要实践。在实际应用场景中,无论是简单数据类型排序、自定义对象的多字段排序,还是处理包含空值的复杂数据集,都需要根据具体需求选择合适的策略。本文聚焦ArrayList排序,深入探讨了Collections.sort()与List.sort()的底层机制,

weixin_34062469的博客 375

Java8 Stream 之sorted方法 排序讲解

本文主要讲解:Java 8 Stream之sorted()排序示例:使用java 8 的流式sorted排序List集合 功能说明:以自然序或着自定义Comparator接口排序规则来排序一个流。 功能详细说明: 1、sorted()默认使用自然序排序, 其中的元素必须实现Comparable接口 2、sorted(Comparator<? super T> comparator):我们可以使用lambada 来创建一个Comparator实例。可以按照升序或着降序来排序元素。 ...

zhouzhiwengang的专栏 10万+

Java集合排序性能对比:list.sort()与stream().sorted()深度解析

在Java编程中,集合排序是数据处理的基础操作,其性能直接影响应用效率。从原理上看,排序算法通常基于比较和交换,Java标准库采用TimSort等优化算法保证O(n log n)的平均时间复杂度。在工程实践中,开发者需要在性能、内存开销和代码可读性之间权衡。list.sort()作为原地排序方法,直接操作底层数组,避免了额外拷贝,适合对性能敏感的场景;而stream().sorted()作为函数式API的一部分,通过数据拷贝实现非侵入式排序,更适用于流式处理管道和需要保持数据不可变的场景。本文通过JMH基准

weixin_30455023的博客 263

Java8 新特性之Stream(九)-- Stream的sorted()详细用法

【代码】Java8 新特性之Stream(九)-- Stream的sorted()详细用法。

PUYALEI的博客 3280

Java stream().sorted() 排序应用

Java stream().sorted() 排序应用

weixin_50989637的博客 1163

C# 死锁:原理、诊断与解决方案深度解析

本文深入探讨了C#中的死锁问题,详细介绍了死锁的基本概念、形成机制、常见场景、诊断方法及解决方案。死锁通常发生在多线程环境下,当多个线程因争夺资源而互相等待时,导致程序无法继续执行。文章通过代码示例展示了常见的死锁场景,如锁的嵌套、同步上下文死锁和线程池死锁,并提供了使用Visual Studio、WinDbg等工具进行死锁诊断的方法。此外,文章还提出了多种预防和解决死锁的策略,包括保持锁顺序一致性、使用锁超时机制、避免同步阻塞异步代码以及使用更高级的同步原语。通过这些方法,开发者可以有效减少死锁的发生,提

记录学习的过程 1406

排序实现java

Java中实现排序可以通过多种方式,包括内置方法、自定义算法或使用第三方库。常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序等。需要降序或按特定字段排序时,可通过实现Comparator接口自定义排序规则。// 降序排序// 输出 [9, 5, 5, 2, 1]

haogexiaole的博客 301

PyCharm + Anaconda虚拟环境:完美配置PySide6开发三件套(Designer/UIC/RCC)的避坑指南

本文详细介绍了如何在PyCharm和Anaconda虚拟环境中配置PySide6开发三件套(Designer/UIC/RCC),提供从环境准备到工具集成的完整解决方案。通过清晰的路径定位和PyCharm外部工具配置指南,帮助开发者快速搭建高效的Python GUI开发环境,避免常见配置陷阱。

weixin_28828243的博客 337

Python介绍与安装

Python介绍与安装

acegi13579的专栏 3218

Java 常用的算法、集合数据结构及排序

一、Collection 1.1List ArrayList 和 LinkedList都是List类型,它们都是按照被插入的顺序保存元素,可以插入重复的元素; 需要进行大量的随机访问使用ArrayList; 需要经常从表中插入和删除元素,应该使用LinkedList; 1.2 Set HashSet、TreeSet、LinkedHashSet都是Set类型,每个相同的项只保存一次(元...

csdn_hugo的博客 939

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

ArcMap:是集空间数据显示、矢量数据编辑、冲突数据检查(拓扑检查)、查询检索(地理编码)、统计(字段属性表)、报表生成、空间分析(ArcGIS Spatial Analyst)和高级制图(制图表达)等众多功能干一体的桌面应用平台软件。而且提供所见即所得的符号编辑器,令用户可以随心所欲地生成任意复杂的点、线、面符号。所支持的空间数据格式包括Arclnfo coverages、ESRI shapefiles、ArcSDE lavers、DXF、DWG、DGN、常见的图像格式、GRIDs、TINs等。

lxlmycsdnfree的博客 6562

Java 8增强的工具类 Arrays(二)

一、排序方法: 5.1、void sort(type[] a) 作用:给数组a排序 5.2、void sort(type[] a,int fromIndex,int toIndex) 作用:给数组a指定的范围排序 5.3、源码: public static void sort(byte[] a) {         DualPivotQuicksort.sort(a); }  

heshouyou的博客 377

测试工程师玩转DeepSeek之Prompt

掌握这些提示词技巧,测试工程师可提升与DeepSeek的协作效率至少3倍。建议结合具体项目上下文进行二次优化,并建立团队内部的提示词知识共享库。✅ “为电商支付接口生成包含幂等性验证的测试用例,覆盖网络中断重试场景”❌ “帮我写测试用例”

weixin_44872675的博客 2259

分享一下如何使用labelimg制作自己的YOLO数据集

首先准备一下自己的下准备一个空文件夹用于保存标签文件,如下图所示。

skywalkerxhx的博客 830

java list排序 效率_性能对比:collections.sort vs treeSet sort vs java8 stream.sorted

0 写在前面的话在项目中有一个排序问题,考虑到未来需要排序的数据量可能很大,想用一个性能较好的排序算法,现在有三套解决方法:jdk提供的集合的sort方法(Collections.sort)、一个可排序的数据结构TreeSet、Java8中流的排序(stream.sorted)。我们都知道,TreeSet的底层是用红黑树实现的,它在调用集合上的add方法时,会始终保持集合中的数据排序,而Colle...

weixin_28756413的博客 1537

Coze智能体开发:搭建一个解析 PDF 文件的工作流

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 2812

java基础总结(七十)--Java8中的parallelStream的坑

about Stream 什么是流? Stream是java8中新增加的一个特性,被java猿统称为流. Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大...

秋天的猿 1万+

【参数配置】OpenClaw 的破解之道(Doom Loop)

本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。

海兰 4038

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java sort sorted,性能对比:collections.sort vs treeSet sort vs java8 stream.sorted

0 写在前面的话在项目中有一个排序问题,考虑到未来需要排序的数据量可能很大,想用一个性能较好的排序算法,现在有三套解决方法:jdk提供的集合的sort方法(Collections.sort)、一个可排序的数据结构TreeSet、Java8中流的排序(stream.sorted)。我们都知道,TreeSet的底层是用红黑树实现的,它在调用集合上的add方法时,会始终保持集合中的数据排序,而Colle...

weixin_31939387的博客 494

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java Sort排序总结

数组Sort排序 正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序 int[] array = {10, 3, 6, 1, 4, 5, 9}; Arrays.sort(array); 降序排序:先将数组Arrays.asList()转为集合,然后使用Collections.reverse()反转集合,注意如果是基础数据类型(不是数据包装类),不能使用Arrays.asList()方法可以使用Guava的Int..

qq_26457825的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

java sort 效率_性能对比:collections.sort vs treeSet sort vs java8 stream.sorted

0 写在前面的话在项目中有一个排序问题,考虑到未来需要排序的数据量可能很大,想用一个性能较好的排序算法,现在有三套解决方法:jdk提供的集合的sort方法(Collections.sort)、一个可排序的数据结构TreeSet、Java8中流的排序(stream.sorted)。我们都知道,TreeSet的底层是用红黑树实现的,它在调用集合上的add方法时,会始终保持集合中的数据排序,而Colle...

weixin_42306480的博客 1172

了解Java8中的parallelStream

about Stream什么是流?Stream是java8中新增加的一个特性,被java猿统称为流.Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的...

haozz的博客 2万+

java8中的steam

Stream是java8中新增加的一个特性,有关算法和计算的,它更像一个高级版本的 Iterator。 (1)Stream是单向的,不可往复,数据只能遍历一次 (2)迭代器使用的是外部迭代,而流使用的是内部迭代。 采用内部迭代,项目可以透明地并行处理,或者用优化的顺序进行处理,要是使用 Java 过去的外部迭代方法,这些优化都是很困难的。 (3)和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后

u013984781的博客 610

java Stream流操作

前言     在Java8中另外一个比较大且非常重要的改动就是Stream。它规范及简化了程序的统计过程。举个例子: //过程式的解决方案 int longest = 0; for(String str : strings){ if(str.startsWith("A")){// 1. filter(), 保留以A开头的字符串 int len = str.length();// 2. mapToInt(), 转换成长度 long

懒猫的脚印 1043
上一篇: Android MediaPlayer 类图和调用关系
下一篇: 跳棋程序有2000用户了,在Github上开源
span76
博客等级 码龄18年 117粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值