1. 程式人生 > >java,stream對集合元素處理,對集合排序

java,stream對集合元素處理,對集合排序

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.Stream;

class User {
    private Integer age;
    private String name;

    public User(Integer age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

public class Main {
    private List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        Main main = new Main();

        String[] strArray = Stream.of("a", "b", "c")
                .filter(x -> !x.equals("b"))
                .toArray(x -> new String[x]);
        Arrays.asList(strArray).forEach(System.out::println);

        TreeSet<String> strSet = Stream.of("a", "b", "c", "c")
                .filter(x -> x != String.valueOf("b"))
                .collect(Collectors.toCollection(TreeSet::new));
        System.out.println(strSet);

        main.f1();
    }

    private void f1() {
        List<User> userList = new ArrayList<>();
        userList.add(new User(3, "Tom3"));
        userList.add(new User(2, "Tom2"));
        userList.add(new User(1, "Tom1"));

        //java.util.stream.Stream,該排序無效
        userList.stream().sorted((User o1, User o2) -> {
            return o1.getAge().compareTo(o2.getAge());
        });
        System.out.println(userList);
        //[User{age=3, name='Tom3'}, User{age=2, name='Tom2'}, User{age=1, name='Tom1'}]

        //java.util.List,該排序有效。
        userList.sort((User o1, User o2) -> {
            return o1.getAge().compareTo(o2.getAge());
        });
        System.out.println(userList);
        //[User{age=1, name='Tom1'}, User{age=2, name='Tom2'}, User{age=3, name='Tom3'}]


        //userList.stream().forEach(f2(user));//報錯
        userList.stream().forEach(this::f2);//正確,方法引用,元素型別要與f2的型別一致,只能有一個入參
        System.out.println(userList);
        //[User{age=12, name='Tom'}, User{age=12, name='Tom'}, User{age=12, name='Tom'}]

        userList.stream().forEach(user -> f3(user, 14));//lambda,可以有多個入參
        System.out.println(userList);
        //[User{age=14, name='Tom'}, User{age=14, name='Tom'}, User{age=14, name='Tom'}]
    }

    /**
     * forEach中呼叫,方法引用
     *
     * @param user
     */
    private void f2(User user) {
        user.setName("Tom");
        user.setAge(12);
    }

    /**
     * forEach中呼叫,lambda
     *
     * @param user
     * @param age
     */
    private void f3(User user, Integer age) {
        user.setName("Tom");
        user.setAge(age);
    }
}

//集合的排序直接使用List.sort即可
//對集合元素的處理可以放在forEach中,例如:forEach(this::f2);

a
c
[a, c]
[User{age=3, name='Tom3'}, User{age=2, name='Tom2'}, User{age=1, name='Tom1'}]
[User{age=1, name='Tom1'}, User{age=2, name='Tom2'}, User{age=3, name='Tom3'}]
[User{age=12, name='Tom'}, User{age=12, name='Tom'}, User{age=12, name='Tom'}]