lamda -- 兩個集合的各種問題處理

引入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'}]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章