引入jar文件
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>20.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
LamdaMoreList.java
package com.example.demo.util;
import com.example.demo.entity.Student;
import com.example.demo.entity.User;
import com.example.demo.entity.UserDTO;
import com.example.demo.entity.UserPO;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
public class LamdaMoreList {
/**
* List<PO> 轉 List<DTO>
*/
public static void test1() {
//1. 初始化數據
UserPO user1 = new UserPO(1, "java");
UserPO user2 = new UserPO(2, "C");
UserPO user3 = new UserPO(3, "PHP");
List<UserPO> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
//2. List<PO> 轉 List<DTO>
List<UserDTO> dtoList = users.stream().map(getParamConverter()).collect(Collectors.toList());
System.out.println(dtoList);
}
private static Function<UserPO, UserDTO> getParamConverter(){
return userPO -> {
UserDTO dto = new UserDTO();
dto.setId(userPO.getId());
dto.setName(userPO.getName());
return dto;
};
}
/**
* List<String> 轉 List<Integer>
*/
public static void test2() {
//1. 初始化List<String>
String nums = "100,101,102,103,104";
List<String> numStrList = Arrays.asList(nums.split(","));
//2. List<String> 轉 List<Integer>
List<Integer> numList = numStrList.stream().map(Integer::valueOf)
.collect(Collectors.toList());
//3. 輸出
numList.stream().forEach(num ->{
System.out.println(num.intValue());
});
}
/**
* 集合A的某個字段數據 copy 到集合B
* 例如:
* 集合A:users = [User{id=1, name='java'}, User{id=2, name='C'}, User{id=3, name='GO'}]
* 把集合A的id值複製給集合B,如:
* 集合B:integersList = [1, 2, 3]
*/
public static void test3() {
//1. 初始化集合A
List<User> users = Lists.newArrayListWithExpectedSize(3);
User u1 = new User(1,"java");
User u2 = new User(2,"C");
User u3 = new User(3,"GO");
users.add(u1);
users.add(u2);
users.add(u3);
System.out.println("users = " + users.toString());
//2. 集合A的數據 copy 到集合B
List<Integer> integersList = users.stream()
.map(user -> {
return user.getId();
}).collect(Collectors.toList());
//3. 輸出
System.out.println("integersList = " + integersList.toString());
}
/**
* 獲取集合A的數據是集合B中年沒有的
* 例如:全集U={2,3} A={1,2,3} B={1,4,5}
*/
public static void test4() {
//1. 初始化集合A
List<Integer> listA = Lists.newArrayListWithExpectedSize(3);
listA.add(1);
listA.add(2);
listA.add(3);
System.out.println("listA = " + listA.toString());
//2. 初始化集合B
List<Integer> listB = Lists.newArrayListWithExpectedSize(3);
listB.add(1);
listB.add(4);
listB.add(5);
System.out.println("listB = " + listB.toString());
//3. 獲取集合A的數據是集合B中年沒有的
List<Integer> ids = listA.stream()
.filter(item -> !listB.contains(item))
.collect(Collectors.toList());
//4. 輸出
System.out.println(ids.toString());
}
/**
* 把集合B中爲null的數據賦值,賦值數據來源於集合A
*/
public static void test5() {
//1. 初始化集合A
List<User> users = Lists.newArrayListWithExpectedSize(3);
User u1 = new User(1,"java");
User u2 = new User(2,"C");
User u3 = new User(3,"GO");
users.add(u1);
users.add(u2);
users.add(u3);
System.out.println("users = " + users.toString());
//2. 初始化集合B
List<Student> students = Lists.newArrayListWithExpectedSize(3);
Student s1 = new Student("1","java");
Student s2 = new Student("2","C");
Student s3 = new Student(null,"GO");
students.add(s1);
students.add(s2);
students.add(s3);
System.out.println("students before: " + students.toString());
//3. 把集合B中爲null的數據賦值,賦值來源於集合A
students.stream().filter(student -> StringUtils.isEmpty(student.getId())).forEach(student -> {
users.stream().filter(user -> StringUtils.equals(user.getName(),student.getName()) && user.getId() != 0).forEach(user -> {
student.setId(String.valueOf(user.getId()));
});
});
//4. 輸出
System.out.println("students after: " + students.toString());
}
public static void main(String[] args) {
System.out.println("List<PO> 轉 List<DTO>: ");
test1();
System.out.println("\nList<String> 轉 List<Integer>:");
test2();
System.out.println("\n集合A的某個字段數據 copy 到集合B:");
test3();
System.out.println("\n獲取集合A的數據是集合B中年沒有的:");
test4();
System.out.println("\n把集合B中爲null的數據賦值,賦值來源於集合A:");
test5();
}
}
User.java
package com.example.demo.entity;
public class User {
private Integer id;
private String name;
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
UserPO.java
package com.example.demo.entity;
public class UserPO {
private Integer id;
private String name;
public UserPO(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
UserDTO.java
package com.example.demo.entity;
public class UserDTO {
private Integer id;
private String name;
public UserDTO() {
}
public UserDTO(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Student.java
package com.example.demo.entity;
public class Student {
private String id;
private String name;
public Student(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
輸出
List<PO> 轉 List<DTO>:
[User{id=1, name='java'}, User{id=2, name='C'}, User{id=3, name='PHP'}]
List<String> 轉 List<Integer>:
100
101
102
103
104
集合A的某個字段數據 copy 到集合B:
users = [User{id=1, name='java'}, User{id=2, name='C'}, User{id=3, name='GO'}]
integersList = [1, 2, 3]
獲取集合A的數據是集合B中年沒有的:
listA = [1, 2, 3]
listB = [1, 4, 5]
[2, 3]
把集合B中爲null的數據賦值,賦值來源於集合A:
users = [User{id=1, name='java'}, User{id=2, name='C'}, User{id=3, name='GO'}]
students before: [Student{id='1', name='java'}, Student{id='2', name='C'}, Student{id='null', name='GO'}]
students after: [Student{id='1', name='java'}, Student{id='2', name='C'}, Student{id='3', name='GO'}]