分组

Map<Integer, List<T>> group = List.stream().collect(Collectors.groupingBy(T::getField));

排序

// 升序
List<T> list = List.stream().sorted(Comparator.comparing(T::getSize)).collect(Collectors.toList());
// 倒序
List<T> list = List.stream().sorted(Comparator.comparing(T::getSize).reversed()).collect(Collectors.toList());

条件查询

//    非boolean
ListUtil.where(List, x -> "LL".equals("LL"));
// boolean
ListUtil.where(List, T::isLL);

封装

import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class ListUtil {
/**
* 判断集合是否有值
*
* @param list
* @return
*/
public static <TOrigin> boolean isAny(List<TOrigin> list) {
return list != null && list.size() > ;
} /**
* 判断map是否有值
*
* @param map
* @return
*/
public static <Key, Value> boolean isAny(Map<Key, Value> map) {
return map != null && map.size() > ;
} /**
* 获取范围集合行
*
* @param list 集合
* @param skip 跳过多少行:pagesiz*pageindex
* @param take 获取多少行:pagesize
*/
public static <TOrigin> ArrayList<TOrigin> getRange(List<TOrigin> list, Integer skip, Integer take) {
ArrayList<TOrigin> itemList = new ArrayList<>();
if (skip < list.size()) {
Integer max = skip + take;
if (max > list.size()) {
max = list.size();
}
for (Integer i = skip; i < max; i++) {
itemList.add(list.get(i));
}
}
return itemList;
} /**
* 扩展where方法
*
* @param source 数据源
* @param predicate 表达式
*/
public static <TOrigin> List<TOrigin> where(List<TOrigin> source, Predicate<? super TOrigin> predicate) {
// 判断当前关键字缓存是否已存在
Stream<TOrigin> stream = source.stream().filter(predicate);
//将Stream转化为List
List<TOrigin> list = stream.collect(Collectors.toList());
return list;
} /**
* 扩展 去重 方法
*
* @param source 数据源
*/
public static <TOrigin> List<TOrigin> distinct(List<TOrigin> source) {
Set set = new HashSet();
List newList = new ArrayList();
set.addAll(source);
newList.addAll(set);
return newList;
} /**
* 获取最小值
* @param sourceList 数据源集合
* @param keyExtractor 需要获取最小值的属性
* */
public static <TOrigin, TAttribute extends Comparable<? super TAttribute>> TOrigin min(List<TOrigin> sourceList, Function<? super TOrigin, ? extends TAttribute> keyExtractor)
{
return sourceList.stream().min(Comparator.comparing(keyExtractor)).get();
}
}

java 集合stream操作的更多相关文章

  1. java集合 stream 相关用法(1)

    java8新增一种流式数据,让操作集合数据更简单方便. 定义基本对象: public class Peo { private String name; private String id; publi ...

  2. Java集合Stream类filter的使用

    之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤.这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果.并且在实际项目中 ...

  3. java集合的操作(set,Iterator)

    集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...

  4. java集合并发操作异常解决方法:CopyOnWriteArrayList

    一.我们知道ArrayList是线程不安全的,请编写一个不安全的案例并给出解决方案 HashSet与ArrayList一致 HashMap HashSet底层是一个HashMap,存储的值放在Hash ...

  5. java集合常用操作

    收集一些常用集合操作的代码,用于治疗健忘症,:) set转list //构造Map数据 Map<String, String> map = new HashMap<String, S ...

  6. java集合(3)-Java8新增的Stream操作集合

    Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...

  7. Java 8: Lambdas和新的集合Stream API

    Lambda是Java8的主要特色,Java 8: Lambdas & Java Collections | zeroturnaround.com一文介绍了使用Lambda集合处理大量数据的方 ...

  8. JAVA 8 主要新特性 ----------------(六)集合Stream API

    一.简介Stream Java8中有两大最为重要的改变.第一个是 Lambda 表达式:另外一 个则是 Stream API(java.util.stream.*).Stream 是 Java8 中处 ...

  9. <JAVA8新增内容>关于集合的操作(Collection/Iterator/Stream)

    因为下文频繁使用lambda表达式,关于Java中的lambda表达式内容请见: http://www.cnblogs.com/guguli/p/4394676.html 一.使用增强的Iterato ...

随机推荐

  1. 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)

    要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...

  2. 64位windows+32位JDK8+32位eclipse是可以的

  3. In case of failure

    In case of failure http://acm.hdu.edu.cn/showproblem.php?pid=2966 Time Limit: 60000/30000 MS (Java/O ...

  4. mongo通信协议

    先是一个包头: struct MsgHeader { int32 messageLength; // total message size, including this int32 requestI ...

  5. Django的mode的分组查询和聚合查询和F查询和Q查询

    1.聚合查询 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下 from django.db.models import Avg from django.db.mo ...

  6. SNP问题大集锦

    SNP问题大集锦 [2017-01-19]       最近小编对基因检测很感兴趣,也跟风去测了一下,这一测不要紧,吓得小编几天没睡着觉,这不,检测报告上称小编的减肥能力弱,虽然小编一家都是胖子,唯有 ...

  7. 2018年上半年UI领域主要的13个设计趋势

    2018年时间过半,通过过去的6个月的观察,其实我们已经可以对于2018年的整个UI领域的设计趋势有了一个更为清晰的判断. 也是推出这篇文章比较合理的时机.下面我们就一起来回顾一下,过去的半年当中,U ...

  8. 通过ANT实现jmeter批量执行脚本、生成报告、发送邮件全套build.xml文件

    在开始通过ANT运行build.xml之前,有一步必须要做,那就是将JMeter所在目录下extras子目录里的ant-JMeter-1.1.1.jar复制到Ant所在目录lib子目录之下,这样Ant ...

  9. 原型工具之团队协作: Axure VS Mockplus

    一款软件产品的诞生,必然会经历一个过程:需求分析.设计.开发.测试.上线.如此反复迭代.而设计阶段中,原型设计.制作.交流.审核.迭代,是软件设计和开发的重要保障. 简单的一段话,我们可以解读出很多隐 ...

  10. Windows操作系统下SVN无法上传*.o文件

    Windows操作系统下SVN无法上传*.o文件 2017年09月07日 10:14:49 yanlaifan 阅读数:834  摘自:https://blog.csdn.net/yanlaifan/ ...