当前位置: 首页 > news >正文

第二站:Java——集合框架的深邃海洋(续)

### Java——集合框架的深邃海洋(续)

在我们的Java集合框架探索之旅中,我们已经涉足了基本操作、高级特性,现在让我们深入探讨一些特定场景下的应用和进阶技巧,比如集合的分区操作、分组、并行流的性能考量,以及如何利用`Collectors`进行复杂数据聚合,这些将为您的编程实践增添更多维度。

#### 集合分区

`Collectors.partitioningBy`方法可以根据条件将集合分为两个部分,这对于数据分析和条件筛选非常有用。```java

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;public class PartitioningExample {public static void main(String[] args) {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");Map<Boolean, List<String>> partitioned = names.stream().collect(Collectors.partitioningBy(name -> name.length() > 5));System.out.println("Short names: " + partitioned.get(false));System.out.println("Long names: " + partitioned.get(true));}
}


```

#### 分组操作

`groupingBy`允许根据某些特征对集合进行分组。```java

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;public class GroupingByExample {public static void main(String[] args) {Person[] people = {new Person("Alice", "Engineer"),new Person("Bob", "Artist"),new Person("Charlie", "Engineer"),new Person("David", "Doctor")};Map<String, List<Person>> byProfession = Arrays.stream(people).collect(Collectors.groupingBy(Person::getProfession));byProfession.forEach((profession, group) -> System.out.println(profession + ": " + group.stream().map(Person::getName).collect(Collectors.toList())));}
}static class Person {private String name;private String profession;Person(String name, String profession) {this.name = name;this.profession = profession;}public String getName() { return name; }public String getProfession() { return profession; }}
}


```

#### 并行流性能考量

虽然并行流可以提高性能,但并非总是最佳选择,特别是对于小数据集或操作成本较低的任务。了解何时使用很重要。```java

import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import java.util.stream.LongStream;public class ParallelStreamPerformance {public static void main(String[] args) {long startTime;long endTime;startTime = System.nanoTime();long sum = LongStream.rangeClosed(1, 1_000_000_000L).sum();endTime = System.nanoTime();System.out.println("Sequential sum: " + sum + ", TimeUnit.NANOSECONDS.convert(endTime - startTime, TimeUnit.NANOSECONDS));startTime = System.nanoTime();sum = LongStream.rangeClosed(1, 1_000_000_000L).parallel().sum();endTime = System.nanoTime();System.out.println("Parallel sum: " + sum + ", TimeUnit.NANOSECONDS.convert(endTime - startTime, TimeUnit.NANOSECONDS));}
}


```

#### Collectors的高级用法

`Collectors.joining`、`toMap`等提供了强大的数据聚合能力。```java

import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;public class AdvancedCollectorsExample {public static void main(String[] args) {List<String> words = Arrays.asList("Hello", "World", "Java", "Programming");String sentence = words.stream().collect(Collectors.joining(" "));System.out.println(sentence); // Hello World Java ProgrammingMap<Character, Long> charCount = words.stream().flatMapToInt(String::chars).mapToObj(c -> (char)c).collect(Collectors.groupingBy(c -> c, Collectors.counting()));System.out.println(charCount);}
}


```

通过这些追加的实践和示例,我们不仅掌握了集合框架在更具体场景下的应用,还学会了如何评估并行流的性能,以及如何巧妙地利用`Collectors`进行复杂的数据转换和聚合,进一步扩展了Java集合框架的使用深度和广度。

http://www.lryc.cn/news/360611.html

相关文章:

  • linux系统下,mysql增加用户
  • Java数据结构与算法(最长回文子串中心扩散法)
  • 基于Python网络招聘数据可视化分析系统的设计与实现
  • 【Linux】Linux工具——gcc/g++
  • 【惯性传感器imu】—— WHEELTEC的惯导模块的imu的驱动安装配置和运行
  • Linux提权一
  • Vue.js中如何实现以列表首列为表头
  • 如果孙宇晨和贾跃亭能够握手,或许将会上演新的戏码
  • 渲染100为什么是高性价比网渲平台?渲染100邀请码1a12
  • Jenkins流水线pipeline--基于上一章的工作流程
  • 比较Rust和Haskel
  • RedisTemplate的Long类型使用increment自增报错
  • 【代码随想录训练营】【Day 36】【贪心-3】| Leetcode 1005, 134, 135
  • 2.7HDR与LDR
  • YOLOv5改进(五)-- 轻量化模型MobileNetv3
  • 用户流失分析:如何使用Python训练一个用户流失预测模型?
  • 【计算机毕设】基于SpringBoot的社区医院信息平台设计与实现 - 源码免费(私信领取)
  • LLM——深入探索 ChatGPT在代码解释方面的应用研究
  • Android中ANR的分析和解决
  • Kotlin 类
  • Forth Python语言:深度解析其四维、五维、六维与七维之奥秘
  • MySQL--复合查询
  • 前端项目开发,3个HTTP请求工具
  • Java_Mybatis
  • 2024HW|常见红队使用工具
  • Redisson集成SpringBoot
  • 设计模式(十二)行为型模式---模板方法模式
  • 【气象常用】剖面图
  • LabVIEW高低温试验箱控制系统
  • Flutter 中的 SliverFillViewport 小部件:全面指南