首页 > 编程语言 >Java零基础-集合:Java 8新增的集合操作

Java零基础-集合:Java 8新增的集合操作

时间:2024-03-28 10:02:29浏览次数:15  
标签:Java List 新增 names 集合 操作 numbers

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

Java是一种广泛应用于软件开发领域的高级编程语言,具有可移植性和跨平台的特性。在Java的发展过程中,不断有新的功能和语法特性引入,以便开发者能够更加方便和高效地编写代码。其中,在Java 8中引入了许多强大的集合操作,本文将重点介绍这些新增的集合操作。

摘要

Java 8新增的集合操作为开发人员提供了一种更简单,更灵活的方式来处理集合。这些新的操作包括流(Stream)、过滤器(Filter)、映射(Map)和归约(Reduce),它们可以大大简化编写和理解集合处理代码的过程。

简介

在Java 8之前,对集合进行操作通常需要使用循环或者迭代器来遍历集合元素,操作繁琐并且容易出错。而Java 8中引入的新的集合操作则提供了一种更加简洁和直观的处理方式。

源代码解析

流(Stream)

流是Java 8中引入的一种新的抽象,它可以作为集合的替代方式。通过使用流,我们可以更加方便地进行集合的操作和处理。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                .filter(n -> n % 2 == 0)
                .mapToInt(n -> n * 2)
                .sum();
System.out.println(sum); // 输出:24

上述代码使用了流的链式调用,首先通过filter方法筛选出偶数,然后使用mapToInt方法将每个数乘以2,最后使用sum方法求和。

过滤器(Filter)

过滤器是一种用于筛选集合中元素的操作。我们可以使用过滤器来根据指定的条件过滤集合中的元素。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
                                   .filter(name -> name.startsWith("A"))
                                   .collect(Collectors.toList());
System.out.println(filteredNames); // 输出:[Alice]

上述代码使用过滤器筛选出以字母"A"开头的名字,并将结果收集到一个新的列表中。

映射(Map)

映射是一种将集合中的元素进行转换或者提取的操作。我们可以使用映射操作将集合中的元素映射为新的值。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<Integer> nameLengths = names.stream()
                                 .map(name -> name.length())
                                 .collect(Collectors.toList());
System.out.println(nameLengths); // 输出:[5, 3, 7, 5]

上述代码使用映射操作将集合中每个名字的长度提取出来,并将结果收集到一个新的列表中。

归约(Reduce)

归约是一种将集合中的元素进行合并计算的操作。我们可以使用归约操作对集合中的元素进行求和、求平均值等操作。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                .reduce(0, (a, b) -> a + b);
System.out.println(sum); // 输出:15

上述代码使用归约操作对集合中的元素求和,初始值设为0,然后使用lambda表达式将两个数相加。

应用场景案例

Java 8新增的集合操作在实际开发中有许多应用场景。以下是一些示例:

  1. 数据过滤:筛选出满足特定条件的数据。
  2. 数据转换:将集合中的元素转换为不同的类型或者格式。
  3. 数据统计:对集合中的数据进行求和、求平均值等操作。
  4. 数据分组:将集合中的元素按照某个属性进行分组。

优缺点分析

Java 8新增的集合操作具有以下优点:

  • 简化代码:使用流式操作可以减少代码量,提高代码的可读性。
  • 提高效率:流式操作可以利用多核处理器,提高代码的执行效率。
  • 增加灵活性:流式操作提供了丰富的操作方法,使得开发者能够更灵活地处理集合数据。

然而,Java 8新增的集合操作也存在一些缺点:

  • 学习成本高:对于初学者来说,掌握流式操作的概念和使用方式可能需要一定的学习成本。
  • 可读性降低:复杂的流式操作可能会降低代码的可读性,使得代码难以理解和维护。

类代码方法介绍

public class CollectionUtils {
    
    public static List<String> filterNames(List<String> names) {
        return names.stream()
                    .filter(name -> name.length() > 5)
                    .collect(Collectors.toList());
    }
    
    public static List<Integer> mapNumbers(List<Integer> numbers) {
        return numbers.stream()
                      .map(number -> number * 2)
                      .collect(Collectors.toList());
    }
    
    public static int sumNumbers(List<Integer> numbers) {
        return numbers.stream()
                      .reduce(0, (a, b) -> a + b);
    }
    
    public static List<String> groupNamesByFirstLetter(List<String> names, String letter) {
        return names.stream()
                    .filter(name -> name.startsWith(letter))
                    .collect(Collectors.toList());
    }
}

上述代码是一个包含了一些常用集合操作方法的工具类。filterNames方法使用过滤器筛选出名字长度大于5的元素;mapNumbers方法使用映射操作将集合中的每个数乘以2;sumNumbers方法使用归约操作对集合中的数求和;groupNamesByFirstLetter方法使用过滤器筛选出以指定字母开头的名字。

Java代码测试用例

public class CollectionUtilsTest {
    
    @Test
    public void testFilterNames() {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
        List<String> filteredNames = CollectionUtils.filterNames(names);
        List<String> expected = Arrays.asList("Charlie");
        assertEquals(expected, filteredNames);
    }
    
    @Test
    public void testMapNumbers() {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> mappedNumbers = CollectionUtils.mapNumbers(numbers);
        List<Integer> expected = Arrays.asList(2, 4, 6, 8, 10);
        assertEquals(expected, mappedNumbers);
    }
    
    @Test
    public void testSumNumbers() {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sum = CollectionUtils.sumNumbers(numbers);
        assertEquals(15, sum);
    }
    
    @Test
    public void testGroupNamesByFirstLetter() {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
        List<String> groupedNames = CollectionUtils.groupNamesByFirstLetter(names, "A");
        List<String> expected = Arrays.asList("Alice");
        assertEquals(expected, groupedNames);
    }
}

上述代码是对集合操作方法的测试用例。使用JUnit框架进行断言,确保集合操作方法的正确性。

全文小结

本文介绍了Java 8新增的集合操作,包括流、过滤器、映射和归约。通过使用这些新的集合操作,我们可以更加方便和高效地处理集合中的元素。同时,本文还给出了一些应用场景案例以及优缺点,让大家能够避开这些坑。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

标签:Java,List,新增,names,集合,操作,numbers
From: https://blog.csdn.net/weixin_66592566/article/details/136806336

相关文章

  • Java零基础-集合:集合框架中的工具类
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • Java零基础-集合:集合的常用方法
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • On Java8读书笔记
    ObjectsEveryWhere使用Reference掌控对象掌控一个对象有两种不同的方式:直接掌控变量本身or间接掌控一个"通道",通过"通道"可以掌控对象在Java中,我们通过间接的方式掌控对象,而这个"通道"就是ReferenceReference不同于对象本身,对象本身往往是"臃肿的"(对象内包括字段和......
  • 华为OD机试 - 最多购买宝石数目(Java & JS & Python & C & C++)
    须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输入描述输出描述解题思路:题目描述橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i]0≤i<nn=gems.length宝石可同时......
  • JavaWeb——HttpServletRequest获取请求头信息和请求中的参数信息用法
    HttpServletRequest接口提供了访问HTTP请求信息的方法,包括请求行和请求头。下面是一些常用的HttpServletRequest方法,用于获取请求行和请求头信息。StringgetMethod():返回请求的HTTP方法,如GET、POST等。StringgetRequestURI():返回请求的URI,不包括查询字符串。String......
  • JAVA------基础篇
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • JavaScript变量/数组
    变量1、var:全局变量(作用域范围大,且允许重复声明)2、let:局部变量(作用域仅在代码块内,且不允许重复声明)3、const:常量(一旦声明,常量的值不能改变)数组特点:长度可变,类型可变for和foreach的区别:1、for遍历数组中的所有元素2、foreach遍历数组中有值的元素,并调用一次传入的函......
  • springboot/ssm招聘系统Java企业在线招聘系统web校园大学生招聘平台
    springboot/ssm招聘系统Java企业在线招聘系统web校园大学生招聘平台基于springboot(可改ssm)+vue项目开发语言:Java框架:springboot/可改ssm+vueJDK版本:JDK1.8(或11)服务器:tomcatpackagecom.controller;importjava.text.SimpleDateFormat;importjava.util.ArrayLi......
  • 力扣:回文数判断 java
    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x=121输出:true示例2:输入:x=-121输出:false解释:从左向右读,为-121。从右向左读,......
  • 力扣:移除元素 java
    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回......