1. 程式人生 > 其它 >java8 stream常用操作

java8 stream常用操作

其實使用Java8很多年了,雖然一直也在用集合的stream操作,但是一直沒有總結,今天就將stream的常用操作做一個總結,

至於stream的概念不會過多介紹,直接給出常用操作的案例,當然也是博主用的比較多的,後面有其他用法,也會補充進來

廢話不多說,直接上程式碼:

package org.dudu.test;

import org.junit.Before;
import org.junit.Test;

import java.util.*;
import java.util.stream.Collectors;

/**
 * Java8 stream常用方法
 */
public class
StreamTestDemo { private List<User> userList; @Before public void createUserList(){ userList = new ArrayList<User>(); User user1 = new User("張三",20); User user2 = new User("李四",25); User user3 = new User("王五",30); User user4 = new User("王麻子",32); User user5
= new User("老王",30); User user6 = new User("老李",25); User user7 = new User("老張",30); userList.add(user1); userList.add(user2); userList.add(user3); userList.add(user4); userList.add(user5); userList.add(user6); userList.add(user7); }
/** * 常規操作 */ //@Test public void streamCommon(){ /** * Java8 stream常規用法 */ userList.stream().forEach((user) -> System.out.println(user.getAge())); } /** * 過濾 */ @Test public void streamFilter(){ /** * 過濾操作,篩選出年齡30的使用者,組裝成一個list<user> */ List<User> userMap = userList.stream().filter((user) -> user.getAge() == 30).collect(Collectors.toList()); userMap.stream().forEach(System.out::println); } /** * 對映 */ @Test public void streamMap(){ /** * 給其中每個使用者的年齡增加5歲 */ List<User> userMap = userList.stream().map(user -> { user.setAge(user.getAge() + 5);return user;}).collect(Collectors.toList()); userMap.stream().forEach(System.out::println); } /** * 對映 */ @Test public void streamMapsum(){ /** * 計算給定使用者的年齡和 */ int sumAges = userList.stream().mapToInt(User::getAge).sum(); System.out.println(sumAges); } /** * 排序 */ @Test public void streamSort(){ /** * 按照年齡從小到達排序(常規操縱) */ List<User> userMap = userList.stream().sorted((user1,user2) -> {return user1.getAge() - user2.getAge();}).collect(Collectors.toList()); userMap.stream().forEach(System.out::println); } /** * 排序 */ @Test public void streamSort1(){ /** * 除了上面常規的排序外, * 我們也可以在sorted通過函式式處理 */ //預設從小到大 // List<User> userMap = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList()); //從大到小 List<User> userMap = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList()); userMap.stream().forEach(System.out::println); } /** * 統計 */ //@Test public void streamCollect(){ /** * 實際當中我們需要聚合操作,比如將該示例中,將年齡相同的使用者分組 * 其實就是需要構造一個Map<Integer,List<User>>的陣列結構,這個時候 * 可以使用stream的collect中的分組操作 */ Map<Integer,List<User>> userMap = userList.stream().collect(Collectors.groupingBy(User::getAge)); userMap.keySet().stream().forEach((age) -> { System.out.println(age); System.out.println(Arrays.toString(userMap.get(age).toArray())); }); } /** * 統計 */ //@Test public void streamCollect1(){ /** * 工作中,有時候需要將某個集合中的屬性,構造成一個集合 * 比如本例中,需要將age屬性構造成一個list<Integer> */ List<Integer> ages = userList.stream().map(User::getAge).collect(Collectors.toList()); System.out.println(Arrays.toString(ages.toArray())); } private class User { private String userName; private int age; public User(String userName, int age) { this.userName = userName; this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString(){ return this.getUserName() + ";" + this.getAge(); } } }