iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >【Java 8 新特性】获取对象列表中的某个属性组成的列表
  • 164
分享到

【Java 8 新特性】获取对象列表中的某个属性组成的列表

javajvmservlet 2023-10-04 09:10:23 164人浏览 薄情痞子
摘要

文章目录 获取对象列表中的某个属性组成的列表1、用法示例2、详细案例 附录:Java 8 Stream 基本用法1、map2、filter3、forEach4、limit5、sort

文章目录

获取对象列表中的某个属性组成的列表

1、用法示例

获取list中所有对象的某个属性

List<UserEntity> users = new ArrayList<>();users.add(new UserEntity(1,"张三","18399990000"));List<String> courseIds =  users.stream().map(UserEntity::getUserName).collect(Collectors.toList());

2、详细案例

UserEntity.java

import java.io.Serializable;public class UserEntity implements Serializable {    private Integer id;    private String userName;    private String phone;    public UserEntity(Integer id, String userName, String phone) {        this.id = id;        this.userName = userName;        this.phone = phone;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }}

Test.java

import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;public class Test {    public static void main(String args[]){        List<UserEntity> users = new ArrayList<>();        users.add(new UserEntity(1,"张三","18399990000"));        users.add(new UserEntity(2,"王五","18399990023"));        users.add(new UserEntity(3,"里斯","18399990005"));        // 获取list中所有对象的某个属性        List<String> courseIds =  users.stream().map(UserEntity::getUserName).collect(Collectors.toList());        System.out.println(courseIds); //[张三, 王五, 里斯]    }}

输出结果:
在这里插入图片描述

附录:Java 8 Stream 基本用法

1、Java 8 Stream 基本介绍

Java 8 api添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 sql 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

+--------------------+       +------+   +------+   +---+   +-------+| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|+--------------------+       +------+   +------+   +---+   +-------+

以上的流程转换为 Java 代码为:

List<Integer> transactionsIds = widgets.stream()             .filter(b -> b.getColor() == RED)             .sorted((x,y) -> x.getWeight() - y.getWeight())             .mapToInt(Widget::getWeight)             .sum();

2、生成流

在 Java 8 中, 集合接口有两个方法来生成流:

  • stream() − 为集合创建串行流。
  • parallelStream() − 为集合创建并行流。

1、map

map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取对应的平方数List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

2、filter

filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// 获取空字符串的数量long count = strings.stream().filter(string -> string.isEmpty()).count();

3、forEach

Stream 提供了新的方法 ‘forEach’ 来迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数:

Random random = new Random();random.ints().limit(10).forEach(System.out::println);

4、limit

limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据:

Random random = new Random();random.ints().limit(10).forEach(System.out::println);

5、sorted

sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:

Random random = new Random();random.ints().limit(10).sorted().forEach(System.out::println);

6、并行(parallel)程序

parallelStream 是流并行处理程序的代替方法。以下实例我们使用 parallelStream 来输出空字符串的数量:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");// 获取空字符串的数量long count = strings.parallelStream().filter(string -> string.isEmpty()).count();

我们可以很容易的在顺序运行和并行直接切换。

7、Collectors

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("筛选列表: " + filtered);String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));System.out.println("合并字符串: " + mergedString);

8、统计

另外,一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果。

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("列表中最大的数 : " + stats.getMax());System.out.println("列表中最小的数 : " + stats.getMin());System.out.println("所有数之和 : " + stats.getSum());System.out.println("平均数 : " + stats.getAverage());

参考资料

来源地址:https://blog.csdn.net/Shipley_Leo/article/details/131022164

--结束END--

本文标题: 【Java 8 新特性】获取对象列表中的某个属性组成的列表

本文链接: https://www.lsjlt.com/news/423327.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作