java8 新特性 Stream流 分组 排序 过滤 多条件去重
Posted 【一粒大米】洞悉技术的本质,享受科技的乐趣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java8 新特性 Stream流 分组 排序 过滤 多条件去重相关的知识,希望对你有一定的参考价值。
private static List<User> list = new ArrayList<User>(); public static void main(String[] args) { list = Arrays.asList( new User(1, "a", 10), new User(4, "d", 19), new User(5, "e", 13), new User(2, "b", 14), new User(3, "a", 10), new User(6, "f", 16) ); long start = System.currentTimeMillis(); order(); println(String.format("耗时[%s]毫秒", (System.currentTimeMillis() - start))); } /** * 多条件去重 * @param list */ public static void order() { list.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>( Comparator.comparing(o -> o.getAge() + ";" + o.getName()))), ArrayList::new)).forEach(u -> println(u)); } public static void group() { Map<Integer, List<User>> collect = list.stream().collect(Collectors.groupingBy(User::getAge)); System.out.println(collect); } /** * filter过滤 * @param list */ public static void filterAge() { list.stream().filter(u -> u.getAge() == 10).forEach(u -> println(u)); } /** * sorted排序 */ public static void stord() { list.stream().sorted(Comparator.comparing(u-> u.getAge())).forEach(u -> println(u)); } /** * limit方法限制最多返回多少元素 */ public static void limit() { list.stream().limit(2).forEach(u -> println(u)); } /** * 不要前多n个元素,n大于满足条件的元素个数就返回空的流 */ public static void skip() { list.stream().skip(2).forEach(u -> println(u)); } // 最大值 最小值 public static void statistics() { Optional<User> min = list.stream().min(Comparator.comparing(User::getUserId)); println(min); Optional<User> max = list.stream().max(Comparator.comparing(User::getUserId)); println(max); } // 统计 public static void summarizingInt(){ IntSummaryStatistics statistics = list.stream().collect(Collectors.summarizingInt(User::getAge)); double average = statistics.getAverage(); long count = statistics.getCount(); int max = statistics.getMax(); int min = statistics.getMin(); long sum = statistics.getSum(); println(average); println(count); println(min); println(sum); println(max); } /** * 转set */ public static void toSet() { Set<User> collect = list.stream().collect(Collectors.toSet()); Iterator<User> iterator = collect.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next().getUserId()); } } /** * 转map */ public static void toMap() { Map<Integer, User> collect = list.stream().collect(Collectors.toMap(User::getUserId, u -> u)); for (Integer in : collect.keySet()) { User u = collect.get(in);//得到每个key多对用value的值 println(u); } } /** *map */ public static void map() { list.stream().map(User::getUserId).forEach(userId -> println(userId)); list.stream().mapToInt(User::getAge).forEach(userId -> println(userId)); list.stream().mapToDouble(User::getUserId).forEach(userId -> println(userId)); list.stream().mapToLong(User::getUserId).forEach(userId -> println(userId)); } /** * 查找与匹配 * allMatch方法与anyMatch差不多,表示所有的元素都满足才返回true。noneMatch方法表示没有元素满足 */ public static void anyMatch() { boolean anyMatch = list.stream().anyMatch(u -> u.getAge() == 100); boolean allMatch = list.stream().allMatch(u -> u.getUserId() == 10); boolean noneMatch = list.stream().noneMatch(u -> u.getUserId() == 10); println(anyMatch); println(allMatch); println(noneMatch); } /** * reduce操作 */ public static void reduce() { Optional<Integer> sum = list.stream().map(User::getAge).reduce(Integer::sum); Optional<Integer> max = list.stream().map(User::getAge).reduce(Integer::max); Optional<Integer> min = list.stream().map(User::getAge).reduce(Integer::min); println(sum); println(max); println(min); } /** * 公共输出 * @param c */ public static void println(Object c) { System.out.println(c.toString()); }
private static List<User> list = new ArrayList<User>();public static void main(String[] args) {list = Arrays.asList(new User(1, "a", 10),new User(4, "d", 19),new User(5, "e", 13),new User(2, "b", 14),new User(3, "a", 10),new User(6, "f", 16));long start = System.currentTimeMillis();order();println(String.format("耗时[%s]毫秒", (System.currentTimeMillis() - start)));}/** * 多条件去重 * @param list */public static void order() {list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getAge() + ";" + o.getName()))), ArrayList::new)).forEach(u -> println(u));}public static void group() {Map<Integer, List<User>> collect = list.stream().collect(Collectors.groupingBy(User::getAge));System.out.println(collect);}/** * filter过滤 * @param list */public static void filterAge() {list.stream().filter(u -> u.getAge() == 10).forEach(u -> println(u));}/** * sorted排序 */public static void stord() {list.stream().sorted(Comparator.comparing(u-> u.getAge())).forEach(u -> println(u));}/** * limit方法限制最多返回多少元素 */public static void limit() {list.stream().limit(2).forEach(u -> println(u));}/** * 不要前多n个元素,n大于满足条件的元素个数就返回空的流 */public static void skip() {list.stream().skip(2).forEach(u -> println(u));}// 最大值 最小值public static void statistics() {Optional<User> min = list.stream().min(Comparator.comparing(User::getUserId));println(min);Optional<User> max = list.stream().max(Comparator.comparing(User::getUserId));println(max);}// 统计public static void summarizingInt(){IntSummaryStatistics statistics = list.stream().collect(Collectors.summarizingInt(User::getAge));double average = statistics.getAverage();long count = statistics.getCount();int max = statistics.getMax();int min = statistics.getMin();long sum = statistics.getSum();println(average);println(count);println(min);println(sum);println(max);}/** * 转set */public static void toSet() {Set<User> collect = list.stream().collect(Collectors.toSet());Iterator<User> iterator = collect.iterator();while(iterator.hasNext()) {System.out.println(iterator.next().getUserId());}}
/** * 转map */public static void toMap() {Map<Integer, User> collect = list.stream().collect(Collectors.toMap(User::getUserId, u -> u));for (Integer in : collect.keySet()) { User u = collect.get(in);//得到每个key多对用value的值 println(u);}}/** *map */public static void map() {list.stream().map(User::getUserId).forEach(userId -> println(userId));list.stream().mapToInt(User::getAge).forEach(userId -> println(userId));list.stream().mapToDouble(User::getUserId).forEach(userId -> println(userId));list.stream().mapToLong(User::getUserId).forEach(userId -> println(userId));}/** * 查找与匹配 * allMatch方法与anyMatch差不多,表示所有的元素都满足才返回true。noneMatch方法表示没有元素满足 */public static void anyMatch() {boolean anyMatch = list.stream().anyMatch(u -> u.getAge() == 100);boolean allMatch = list.stream().allMatch(u -> u.getUserId() == 10);boolean noneMatch = list.stream().noneMatch(u -> u.getUserId() == 10);println(anyMatch);println(allMatch);println(noneMatch);}/** * reduce操作 */public static void reduce() {Optional<Integer> sum = list.stream().map(User::getAge).reduce(Integer::sum);Optional<Integer> max = list.stream().map(User::getAge).reduce(Integer::max);Optional<Integer> min = list.stream().map(User::getAge).reduce(Integer::min);println(sum);println(max);println(min);}/** * 公共输出 * @param c */public static void println(Object c) {System.out.println(c.toString());}
--------------------- 作者:anningx 来源:CSDN 原文:https://blog.csdn.net/qq_39739458/article/details/84970293 版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于java8 新特性 Stream流 分组 排序 过滤 多条件去重的主要内容,如果未能解决你的问题,请参考以下文章