java中对集合的遍历可以分为三种:(1)for 遍历 (2)foreach遍历 (3)iterator 遍历 例如:
List<User> userList = new ArrayList<>(); userList.add(new User(1, "鲁班", 7)); userList.add(new User(2, "公孙离", 8)); userList.add(new User(3, "马可波罗", 9)); userList.add(new User(4, "百里守约", 10)); userList.add(new User(5, "上官婉儿", 10)); for (int i = 0; i < userList.size(); i++) { System.out.println("for循环遍历输出: " + userList.get(i)); } for (User user : userList) { System.out.println("foreach遍历输出: " + user); } for (Iterator it = userList.iterator(); it.hasNext(); ) { System.out.println("iterator遍历输出: " + it.next()); }
利用java8 中的lambda 表达式可以快速实现对集合的整合处理:
1:遍历输出userlist :
userList.forEach(user -> { System.out.println("lambda forEach输出: " + user); });
2:获取userList 中用户年龄的列表ageList
List<Integer> ageList = userList.stream().map(User::getAge).collect(Collectors.toList());
3:对ageList 去重 distinct
List<Integer> ageList1 = ageList.stream().distinct().collect(Collectors.toList());
4: 根据条件过滤列表
List<User> userListFilter = userList.stream().filter(user -> !user.getName().equals("鲁班")).collect(Collectors.toList());
5:求和sum
int totalAge = userList.stream().mapToInt(User::getAge).sum();
6:正排序
List<User> sortUsers = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
7:逆排序
List<User> sortUsers1 = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
8:对象列表去重
List<User> userList1 = userList.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(User::getAge))), ArrayList::new));
9:两个List 对象过滤
List<User> userList2 = userList.stream() .filter(user -> userList1.stream().noneMatch(user1 -> Objects.equals(user.getId(), user1.getId()))) .collect(Collectors.toList());
源码测试内容:
@Data @AllArgsConstructor public class User { private int id; private String name; private int age; }
import java.util.*; import java.util.stream.Collectors; import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; /** * @author wanglong * @since 2021/3/28 12:58 */ public class LambdaDemo { public static void main(String[] args) { /*List<User> userList = new ArrayList<User>() { { add(new User(1, "鲁班", 7)); add(new User(2, "公孙离", 8)); add(new User(3, "马可波罗", 9)); add(new User(4, "百里守约", 10)); } };*/ List<User> userList = new ArrayList<>(); userList.add(new User(1, "鲁班", 7)); userList.add(new User(2, "公孙离", 8)); userList.add(new User(3, "马可波罗", 9)); userList.add(new User(4, "百里守约", 10)); userList.add(new User(5, "上官婉儿", 10)); for (int i = 0; i < userList.size(); i++) { System.out.println("for循环遍历输出: " + userList.get(i)); } for (User user : userList) { System.out.println("foreach遍历输出: " + user); } for (Iterator it = userList.iterator(); it.hasNext(); ) { System.out.println("iterator遍历输出: " + it.next()); } userList.forEach(user -> { System.out.println("lambda forEach输出: " + user); }); //输出 ageList List<Integer> ageList = userList.stream().map(User::getAge).collect(Collectors.toList()); System.out.println("ageList: " + ageList); //过滤ageList distinct List<Integer> ageList1 = ageList.stream().distinct().collect(Collectors.toList()); System.out.println("ageList1: " + ageList1); //filter 过滤列表 List<User> userListFilter = userList.stream().filter(user -> !user.getName().equals("鲁班")).collect(Collectors.toList()); System.out.println("userListFilter: " + userListFilter); //求和 sum int totalAge = userList.stream().mapToInt(User::getAge).sum(); System.out.println("年龄总和:" + totalAge); //正排序 List<User> sortUsers = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList()); System.out.println("按年龄正排序:" + sortUsers); //逆排序 List<User> sortUsers1 = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList()); System.out.println("按年龄逆排序:" + sortUsers1); //list 对象去重 List<User> userList1 = userList.stream() .collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(User::getAge))), ArrayList::new)); System.out.println("list对象去重: " + userList1); //list对象过滤 List<User> userList2 = userList.stream() .filter(user -> userList1.stream().noneMatch(user1 -> Objects.equals(user.getId(), user1.getId()))) .collect(Collectors.toList()); System.out.println("list 对象过滤:" + userList2); } }