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

这篇具有很好参考价值的文章主要介绍了【Java 8 新特性】获取对象列表中的某个属性组成的列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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;

/**
 * @author: shipleyleo
 * @create: 2023-06-03 15:22:54
 */
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;

/**
 * @author: shipleyleo
 * @create: 2023-06-03 15:51:03
 */
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 新特性】获取对象列表中的某个属性组成的列表,# Java基础,java,jvm,servlet

附录: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://www.toymoban.com/news/detail-695428.html

  • 【Java】使用lambda表达式获取list中所有对象的某个属性以及获取特定属性的某一个对象
  • Java 8 Stream | 菜鸟教程

到了这里,关于【Java 8 新特性】获取对象列表中的某个属性组成的列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • GEE:获取要素集合(FeatureCollection)中的一个要素(Feature)的某个属性

    作者:CSDN @ _养乐多_ 本文将介绍如何获取要素集合(FeatureCollection)中的一个要素(Feature)的某个属性,并介绍如何打印要素(Feature)的属性名称 (keys)。 比如,我先设置一个点集合,并使用该点集合去提取栅格图像多个波段的像素值,当我获得了像素值以后,想要把指

    2024年02月19日
    浏览(46)
  • Java当中List集合根据对象某个属性进行去重

    关于以下方法,直接可以在自己项目创建一个类,然后进行测试使用,去重方式有很多种,文本末尾也提供了每个方法的运行结果,供大家参考使用! 文章大量使用到了Java8当中的Lambda表达式,以及stream流相关基础知识。如果您用的不熟,没关系,可以直接复制下面的方案然

    2024年02月16日
    浏览(64)
  • java的list数组按数组中对象的某个属性排序

    在 Java 中,可以使用 Collections.sort() 方法和 Comparator 接口来对 List 中的对象按照对象的某个属性进行排序。以下是一个示例代码: 假设有一个 Person 类,它包含一个 name 字符串属性和一个 age 整数属性,我们可以通过对 ListPerson 类型的列表进行排序,按照 Person 对象的 age 属性

    2024年02月04日
    浏览(45)
  • list根据对象中某个字段属性去重Java流实现

    在Java的流(Stream)中,你可以使用distinct方法来实现根据对象中某个字段属性去重的功能。要实现这个功能,你需要重写对象的hashCode和equals方法,以确保相同字段属性的对象被认为是相等的。以下是一个示例代码: 在上面的代码中,YourObject是你自定义的对象类型,你需要根据

    2024年02月10日
    浏览(62)
  • list对象中如何根据对象中某个属性去重使用Java8流实现

    在 Java 8 的流操作中,可以使用 distinct 方法来对一个对象流进行去重,但是默认情况下它会使用对象的 equals() 方法来判断重复。如果你希望根据对象的某个属性进行去重,则可以使用 distinct 方法结合 map 方法来实现。 下面是一个示例代码,假设你有一个 List 对象 list,其中包

    2024年02月11日
    浏览(55)
  • java 使用stream累加对象中某个属性的值并返回总和

    假设有一个包含对象的List列表,每个对象都有一个属性value,可以使用Java 8中的Stream流来累加对象中某个属性的值并返回总和。以下是一些可能的实现方法: 1、使用reduce方法: 这里使用了mapToInt方法将每个对象转换为其value属性的值,然后使用reduce方法将这些值累加起来。

    2024年02月11日
    浏览(83)
  • js如何获取对象中的所有属性

    循环遍历对象的 所有属性 ,并逐个输出它们的值;每次执行时,都会将一个属性名赋值给所定义的变量 输出一个对象的所有 属性名 ,该方法返回一个数组,数组内包括对象内可枚举属性 输出一个对象的所有 属性值 。该方法返回一个数组,数组内包含对象自身所有可枚举

    2024年02月11日
    浏览(47)
  • Java通过属性名获取Object对象属性值

    通过已知的属性名称,从对象里获取数据的方式 通过将Object转为Map: 通过invoke方式: 调用方式:

    2024年02月15日
    浏览(40)
  • Java 反射设置/获取对象属性值

    ✨大家好,我是【zhuzicc】~ ,一位主攻【Java】的 攻城狮!✨ 欢迎对【Java】感兴趣的大佬,关注我 😜 ———————————————— ❤️ ❤️ ❤️ 如果觉得本文还不错,点赞 + 评论 + 关注 + 收藏。有补充欢迎评论交流,我将努力创作更多更好的文章。 大佬们的支持

    2024年02月07日
    浏览(53)
  • 检查一个Java List是否包含某个JavaBean对象的特定值,并且获取这个值

    在这个例子中,我们使用了Java 8的 Optional 类来处理可能不存在的结果。如果找到了匹配的Bean对象,我们可以使用 get() 方法获取它,并打印出其名称。如果没有找到匹配的Bean对象, isPresent() 方法将返回 false ,我们将打印出相应的消息。

    2024年01月24日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包