添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
import java.util.*; import java.util.stream.Collectors; import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.*; * @Author: * @Date: 2018/12/12 13:08 * @Description: public class test { public static void main(String[] args) { List list = new ArrayList<>(); list.add(new User(21L, "张三")); list.add(new User(25L, "李四")); list.add(new User(22L, "王五")); list.add(new User(19L, "赵柳")); list.add(new User(32L, "王5")); list.add(new User(29L, "王6")); list.add(new User(21L, "王7")); // 对象根据年龄属性升序排序 List newList = list.stream().sorted(Comparator.comparing(User::getAge)).collect(toList()); // 对象根据年龄属性降序排序 List newList = list.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(toList()); // 标识升序,再按创建日期降序 // List newList = announcementList.stream().sorted(Comparator.comparing(BhAnnouncement::getReadFlag).thenComparing(BhAnnouncement::getSendTime).reversed()).collect(toList()); // list遍历 newList.forEach(System.out::println); // 平均数 double asDouble = list.stream().mapToLong(User::getAge).average().getAsDouble(); System.out.println("average:" + asDouble); double avg = list.stream().collect(Collectors.averagingLong(User::getAge)); System.out.println("average:" + avg); // 最大值 long asLong = list.stream().mapToLong(User::getAge).max().getAsLong(); System.out.println("max:" + asLong); // 最小值 long asLong1 = list.stream().mapToLong(User::getAge).min().getAsLong(); System.out.println("min:" + asLong1); // 求和 long sum1 = list.stream().mapToLong(User::getAge).sum(); System.out.println("sum:" + sum1); // 提取对象属性生成list List ids = list.stream().map(User::getAge).collect(toList()); System.out.println(ids); // list升序排序 Collections.sort(ids); System.out.println(ids); // 生成中位数 Long j; if (ids.size() % 2 == 0) { j = (ids.get(ids.size() / 2 - 1) + ids.get(ids.size() / 2)) / 2; System.out.println("中位数为" + j); } else { j = ids.get(ids.size() / 2); System.out.println("中位数为" + j); // list倒序排序 ids.sort(Comparator.reverseOrder()); System.out.println(ids); // 去重 List users = list.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(User::getAge))), ArrayList::new)); System.out.println("去重:"+users); * List -> Map * 需要注意的是:toMap 如果集合对象有重复的key,会报错Duplicate key .... * apple1,apple12的id都为1。可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 Map userMap = list.stream().collect(Collectors.toMap(User::getAge, a -> a, (k1, k2) -> k1)); System.out.println(userMap); //过滤出符合条件的数据 List filterList = list.stream().filter(a -> a.getName().equals("李四")).collect(toList()); System.out.println("filterList:" + filterList); List list2 = Arrays.asList(1, 2, 3, 4, 5); int sum = list2.stream().reduce(0, (acc, value) -> acc + value); System.out.println(sum); List result = list2.stream().filter((value) -> value > 2).collect(toList()); result.forEach(System.out::println); List result2 = list2.stream().map(value -> String.format("String:%s", value)).collect(toList()); result2.forEach(System.out::println); // 用于收集统计数据的状态对象,例如count,min,max,sum和平均。 IntSummaryStatistics stats = list2.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Max : " + stats.getMax()); System.out.println("Min: " + stats.getMin()); System.out.println("Sun: " + stats.getSum()); System.out.println("Average : " + stats.getAverage()); System.out.println("Count : " + stats.getCount()); System.out.println("toString : " + stats.toString()); class User { private Long age; private String name; public User(Long i, String s) { this.age = i; this.name = s; public Long getAge() { return age; public void setAge(Long age) { this.age = age; public String getName() { return name; public void setName(String name) { this.name = name; @Override public String toString() { return "User [age=" + age + ", name=" + name + "]"; import java .util.Comparator; import java .util.Map; import java .util.concurrent.ConcurrentHashMap; import java .util.function.Function; import java .util.function.Predicate; import java 想象一下如果以前的 Java 写法针对 List 与Map容器类相互转换,特定 属性 的排重,集合元素 排序 ,过滤筛选,删除元素,奇偶性判断,返回限制的个数……之类的操作,第一步就是需要写for循环,把每个元素遍历出来,再做自己逻辑操作。 这里抛开以前在for循环里面写代码的固化思维,减少一点for,简化代码,如何写得更加简洁? 首先创建今天的主角类:Zoo,类 属性 很简单:id和name public class Zoo { private int id; private String name; Java 查找 List 中的最大值、 最小值 java &gt; List &lt;Long&gt; list = new Array List (); java .util. List &lt; java .lang.Long&gt; list = [] java &gt; list .add(1L) java .lang.Boolean res1 = true java &gt... Java 8集合 List 排序 、筛选1. List 1.1 Array List 1.2 Linked List 1.3 Array List 和Linked List 比较1.4 List 过滤指定元素1.4.1 准备待测试的 List 1.4.2 使用Iterator遍历 List 1.4.2 使用 Java 8对 List 过滤筛选1.5 使用 Java 8对 List 排序 1.5.1 单个字段 排序 1.5.2 多个字段组合 排序 1.6 Li... stream的min,max,findFirst,findAny操作,我们先看下函数的定义 Optional&lt;T&gt; min(Comparator&lt;? super T&gt; comparator); Optional&lt;T&gt; max(Comparator&lt;? super T&gt; comparator); Optio... 点击上方关注订阅黑码教主获取更多精彩内容 Java 8统计 list 中指定 属性 的最大、最小、 平均值 求和 使用方式: list .stream().mapToDouble(Student1::getScore).sum()//和 list .stream().mapToDouble(Student1::getScore).max()//最大 list .stream().mapToDouble(Student1::g... //过滤掉需要判断最大值 属性 的值为空的数据 //过滤掉需要判断最大值 属性 的值为空的数据 upgradeDevDto List = upgradeDevDto List .stream().filter(e -> e.getEndUpgradeTime() != null).collect(Collectors.to List ()); //Optional类是一个可以为n 点击上方关注订阅黑码教主获取更多精彩内容 Java 8统计 list 中指定 属性 的最大、最小、 平均值 求和 使用方式: list .stream().mapToDouble(Student1::getScore).sum()//和 list .stream().mapToDouble(Student1::getScore).max()//最大 list .stream().mapToDouble(Student1::g...