排序

依据自定义对象的某个属性进行排序.

List<Student> students = Arrays.asList(student1, student2, student3);

students.sort(Comparator.comparing(Student::getScore).reversed());

students.sort(Collections.reverseOrder(Comparator.comparing(Student::getScore)));

List<Student> sorted = students.stream().sorted(Comparator.comparing(Student::getScore).reversed()).collect(
Collectors.toList());

Java 8 之前版本的排序方法可参考这里: http://stackoverflow.com/a/2784576

分组

分组是将 List 中的对象按照某一属性进行分组并做聚合或统计:

Map<KeyType, List<ClassName>> map1 = List.stream().collect(Collectors.groupingBy(ClassName::getFieldName, Collectors.toList()));

Map<KeyType, Long> map = List.stream().collect(Collectors.groupingBy(ClassName::getFieldName, Collectors.counting()))

分区

List 依据某一标准分割为两组.

Map<Boolean, Map<String, Long>> map = students.stream()
.collect(
Collectors.partitioningBy(item -> item.getScore() > 60,
Collectors.groupingBy(Student::getName, Collectors.counting())
)
);

List 分割成多个组, 每个组有指定数量的元素(依赖 Apache Commons Collections):

List<List<T>> ListUtils::partition(List<T> list, int size);

List<List<Student>> lists = ListUtils.partition(students, 2);

参考链接:

聚合

求和:

int result = Stream.of(1, 2, 3, 4).sum();
int result = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
int result = Stream.of(1, 2, 3, 4).reduce(0, (sum, item) -> sum + item);
int result = Stream.of(1, 2, 3, 4).collect(Collectors.summingInt(Integer::intValue));

参考链接:

删除值为 null 的元素

List 中有多个 null 元素时, List.remove(null) 只能移除第一个 null 元素, 可使用 List.removeAll(Collections.singletonList(null)) 移除所有的 null 元素.

public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add(null);
list1.add(null);
list1.add("2");
list1.add("3");
list1.remove(null);
System.out.println(list1);//[null, 2, 3] List<String> list2 = new ArrayList<>();
list2.add(null);
list2.add(null);
list2.add("2");
list2.add("3");
list2.removeAll(Collections.singletonList(null));
System.out.println(list2);//[2, 3]
}

参考链接: Java remove all null elements from list

Java 8 List的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  10. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

随机推荐

  1. 用 python 来操作 docx, xlsx 格式文件(一)(使用 xlsxwriter 库操作xlsx格式文件)

    需要从数据库读取日志生成相应的 docx,xlsx 文件做相应的记录 所以自然要用到docx, xlsxwriter 库 但是这些库的应用场景非常广泛,任何需要对 word,excel 文件执行重复性 ...

  2. (九)MySQL用户和权限管理

    (1)用户管理 1)登录和退出mysql 例: mysql -h192.168.111.150 -P3306 -uroot -predhat mysql -e 'select user,host,au ...

  3. PHP文件操作函数

    1 获得文件名: basename(); 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. eg: 复制代码 代码如下: ...

  4. selenium Select用法笔记

    select_by value:参数为option中的value属性,例如:HTML代码中 <ignore_js_op> ,应该是value="volvo"这个值,所以 ...

  5. Codeforces 1036E. Covered Points

    又一次写起了几何.... 特殊处理在于有可能出现多条线段交于一点的情况,每次考虑时,对每条线段与其他所有线段的交点存在一个set里,对每一个set,每次删除set.size()即可 重点在于判断两条线 ...

  6. 【计算几何】【状压dp】Codeforces Round #226 (Div. 2) D. Bear and Floodlight

    读懂题意发现是傻逼状压. 只要会向量旋转,以及直线求交点坐标就行了.(验证了我这俩板子都没毛病) 细节蛮多. #include<cstdio> #include<algorithm& ...

  7. 【进制转换】CODEVS 1740 进制计算器

    #include<cstdio> #include<iostream> #include<string> using namespace std; string s ...

  8. 【二维单调队列】BZOJ1047-[HAOI2007]理想的正方形

    [题目大意] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [思路] 裸的二维单调队列.二维单调队列的思路其实很简单: (1)对于每 ...

  9. Qemu 有用的链接

    Qemu下载和编译 Download https://en.wikibooks.org/wiki/QEMU/Linux https://en.wikibooks.org/wiki/QEMU/Insta ...

  10. [Git] Git把Tag推送到远程仓库

    转载: http://blog.csdn.net/hustpzb/article/details/8056518 用git tag来给工程打上标签,但是这个命令只是在本地仓库打标签而已, 为了能把标签 ...