stream的使用

java8:stream的使用

1、获取List中重复的元素

List<String> repeatColumnList = Arrays.stream(nameList).collect(Collectors.toMap(e -> e,e -> 1,(a,b) -> a + b))// 获得元素出现频率的 Map,键为元素,值为元素出现的次数
                .entrySet().stream()// Set<Entry>转换为Stream<Entry>
                .filter(entry -> entry.getValue() >1)// 过滤出元素出现次数大于 1 的 entry
                .map(entry -> entry.getKey())// 获得 entry 的键(重复元素)对应的 Stream
                .collect(Collectors.toList());// 转化为 List
2、判断List中是否含有某个元素
repeatColumnList.stream().filter(o -> o.equals(name)).findAny().orElse(null) == null
3、对List整个对象进行去重处理
List<Map> unique = list.stream().distinct().collect(Collectors.toList())
 unique.forEach(Map -> System.out.printf("Map[id: %s, name: %s]\n", Map.get(""), Map.get("")));
4、根据List中某一个字段,去除重复的map
  List<Map> dicList = datasetColumnList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o ->{
  			// 根据多个字段去重,以","分割 
            return o.get("alias").toString();
        }))),ArrayList::new));
5、对List中的一个字段去重再求和
BigDecimal sum = list.stream().filter(v -> {
			boolean flag = !dealBankNumber.toString().contains(v.get(""));
			dealBankNumber.append("_").append(v.get(""));
			return flag;
		}).map(Map::get("")).reduce(BigDecimal.ZERO, BigDecimal::add);
6、forEach

Stream 提供了新的方法 ‘forEach’ 来迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数:

Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
7、map

map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 获取对应的平方数 List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

8、filter

filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); // 获取空字符串的数量 int count = strings.stream().filter(string -> string.isEmpty()).count();

9、limit

limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据:

Random random = new Random(); random.ints().limit(10).forEach(System.out::println);

10、sorted

sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:

Random random = new Random(); random.ints().limit(10).sorted().forEach(System.out::println);

11、并行(parallel)程序

parallelStream 是流并行处理程序的代替方法。以下实例我们使用 parallelStream 来输出空字符串的数量:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); // 获取空字符串的数量 int count = strings.parallelStream().filter(string -> string.isEmpty()).count();

我们可以很容易的在顺序运行和并行直接切换。


12、Collectors

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());   
System.out.println("筛选列表: " + filtered); String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); 
System.out.println("合并字符串: " + mergedString);

13、统计

另外,一些产生统计结果的收集器也非常有用。它们主要用于int、double、long等基本类型上,它们可以用来产生类似如下的统计结果。

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);   
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();   System.out.println("列表中最大的数 : " + stats.getMax()); System.out.println("列表中最小的数 : " + stats.getMin()); System.out.println("所有数之和 : " + stats.getSum()); System.out.println("平均数 : " + stats.getAverage());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值