java,stream對集合元素處理,對集合排序
阿新 • • 發佈:2019-02-16
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'}]