Java 8 Stream API 操作List详解:提取属性、转换与排序

需积分: 5 0 下载量 18 浏览量 更新于2024-08-03 收藏 321KB PDF 举报
"Java 8 引入了 Stream API,为集合处理提供了强大的新功能,使得数据处理更加高效和简洁。Stream API支持串行和并行操作,与Lambda表达式结合,极大地提升了代码的可读性和执行效率。本文将总结在处理list时常用的Stream API操作方法。" 1. 取出某一属性 当需要从list中提取每个元素的特定属性时,可以使用 `map` 操作。例如,如果list中包含User对象,且User有一个名为`getName`的方法,可以使用以下代码将所有User的名字提取到一个新的list中: ```java List<User> userList = ...; List<String> names = userList.stream() .map(User::getName) .collect(Collectors.toList()); ``` 2. 复制list内容 要将一个list的内容复制到另一个list,可以使用 `addAll` 方法: ```java List<String> mListStub = new ArrayList<>(); List<String> list = ...; mListStub.addAll(list); ``` 3. list转换成数组 将list转换为数组,首先需要创建一个与list大小相等的数组,然后使用 `toArray` 方法: ```java ArrayList<String> list = new ArrayList<>(); String[] strings = new String[list.size()]; list.toArray(strings); ``` 4. 数组转换成list 反之,将数组转换为list,可以使用 `Arrays.asList`: ```java String[] s = {"a", "b", "c"}; List<String> list = Arrays.asList(s); ``` 5. list转化为map 如果list中的元素是具有唯一标识的对象,可以通过 `Collectors.toMap` 创建一个映射: ```java List<User> userList = ...; Map<Long, User> map = userList.stream() .collect(Collectors.toMap(User::getId, user -> user)); ``` 这里假设User有一个`getId`方法返回其唯一的标识。 6. list根据实体类某个属性排序 对list按照实体类的一个属性进行升序或降序排列,可以使用 `sorted` 方法配合比较器。例如,对于一个包含Mission对象的list,按照`missId`排序: ```java class Mission { int missId; String name; // getters and setters... public static Comparator<Mission> byMissId() { return (o1, o2) -> o1.getMissId() - o2.getMissId(); } } List<Mission> missions = ...; List<Mission> sortedMissions = missions.stream() .sorted(Mission.byMissId()) .collect(Collectors.toList()); ``` 若要降序排序,只需在比较器中交换 `o1` 和 `o2` 的位置。 以上是Java 8 Stream API在处理list时的一些常用操作。通过这些方法,开发者可以更有效地处理大量数据,简化代码,并提高程序的执行效率。Stream API的并行处理能力也能充分利用多核处理器的优势,实现更高效的并发操作。