分组

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. JDK-8不是有效的Win32应用程序

  2. SUSE11&12 永久关闭防火墙

    SUSE11下:关闭操作为:service SuSEfirewall2_setup stopservice SuSEfirewall2_init stop取消开机启动防火墙:chkconfig SuS ...

  3. nyoj86-找球号(一) 【set 二分查找 hash】

    http://acm.nyist.net/JudgeOnline/problem.php?pid=86 找球号(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ...

  4. Python3 open() 函数

    Python3 open() 函数  Python3 内置函数 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 ...

  5. 3.滑雪-深搜&dp

    //Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道载一个区域中最长底滑 ...

  6. MQ基础概念和介绍

    一.中间件 MQ是一种中间件产品,至于什么是中间件,中间件能干什么,参见以下链接: http://baike.baidu.com/view/23710.htm 二.WebSphere MQ的原理 We ...

  7. 【深度好文】多线程之WaitHandle-->派生-》Semaphore信号量构造

    Semaphore 继承自WaitHandle. 信号量说简单点就是为了线程同步,或者说是为了限制线程能运行的数量. //创建一个限制资源类 //资源数为5,开放资源数为2 //主线程自动占有3个资源 ...

  8. C语言文本处理

    一.conf文本 http://blog.163.com/lixiangqiu_9202/blog/static/53575037201431743236762/ http://blog.csdn.n ...

  9. 版本号比较函数-js

    面试前,让做的一个版本号比较函数. <script type="text/javascript"> var v1=prompt("请输入第一个版本号" ...

  10. PS抠发丝技巧 「选择并遮住…」

    PS抠发丝技巧 「选择并遮住…」 现在的海报设计,大多数都有模特MM,然而MM的头发实用太多了,有的还飘起来…… 对于设计师(特别是淘宝美工)没有一个强大.快速.实用的抠发丝技巧真的混不去哦.而PS ...