资讯专栏INFORMATION COLUMN

用Lambda武装你的Java: 集合转换

Ajian / 1507人阅读

摘要:网上介绍和集合新特性的代码太千篇一律了,我来提供些不一样的。或者实现如下它的实现没有使用,因为是一种强大到能延迟处理和并行处理的,我们简单的集合操作不需要这么高级的能力。目前只写了三个方法,如果有需求,还可以扩充更多的方法。

网上介绍Java 8 lambda和集合新特性的代码太千篇一律了,我来提供些不一样的。虽然很简单,但也是工业级代码,不是网上抄来抄去的教学代码。权当给大家提供一个思路。

你想把Collection转换成Collection,或者复制、合并、排序,你可以用Java 8的stream API,但我觉得书写起来太繁(每次都要import Collectors, 再写上Collectors.toXXX),你可以用以下这个工具类来做。

Collection elements1 = ..., elements2 = ...;

Collection rs = Colls.map(elements, t->new R(t));
// 或者 Colls.map(elements, R::new);

Collection allElements = Colls.copy(elements1, elements2);
Collection sortedElements = Colls.copySort(comparator, elements1, elements2);

Colls实现如下:

import java.util.*;
import java.util.function.Function;

public abstract class Colls {
  public static  List map(Collection coll, Function transformer) {
    List result = new ArrayList<>(coll.size());
    for (T t : coll) {
      result.add(transformer.apply(t));
    }
    return result;
  }

  @SafeVarargs
  public static  List copy(Collection... colls) {
    List list = new ArrayList<>();
    for (Collection coll : colls) {
      list.addAll(coll);
    }
    return list;
  }

  @SafeVarargs
  public static  List copySort(Comparator comparator, Collection... colls) {
    List list = copy(colls);
    Collections.sort(list, comparator);
    return list;
  }
}

它的实现没有使用stream API,因为stream是一种强大到能延迟处理和并行处理的API,我们简单的集合操作不需要这么高级的能力。

目前只写了三个方法,如果有需求,还可以扩充更多的方法。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64238.html

相关文章

  • Lambda武装你的Java: 灵活的事务

    摘要:假如你写了类似这样的和伪代码问题来了,和分别用了两个分开的事务,如果你用了或,并且是的,这就没法运行。你需要让两次调用运行在同一个事务里。 当你采用Spring之类的框架,用了声明式事务,难道每一段需要事务的代码都必须写成一个bean method,再标上@Transactional? 未免太麻烦了,不信你瞧。假如你写了类似这样的Controller和Service (伪代码): ...

    The question 评论0 收藏0
  • Java8流特性和Lambda表达式

    摘要:表达式体现了函数式编程的思想,即一个函数亦可以作为另一个函数参数和返回值,使用了函数作参数返回值的函数被称为高阶函数。对流对象进行及早求值,返回值不在是一个对象。 Java8主要的改变是为集合框架增加了流的概念,提高了集合的抽象层次。相比于旧有框架直接操作数据的内部处理方式,流+高阶函数的外部处理方式对数据封装更好。同时流的概念使得对并发编程支持更强。 在语法上Java8提供了Lamb...

    gaara 评论0 收藏0
  • Java 8th 函数式编程:lambda 表达式

    摘要:自定义函数式接口我们在前面例子中实现的苹果筛选接口就是一个函数式接口定义如下,正因为如此我们可以将筛选逻辑参数化,并应用表达式仅包含一个抽象方法,依照定义可以将其视为一个函数式接口。 Lambda 表达式是 java 8th 给我们带来的几个重量级新特性之一,借用 lambda 表达式可以让我们的程序设计更加简洁。最近新的项目摒弃了 6th 版本,全面基于 8th 进行开发,本文将探讨...

    luffyZh 评论0 收藏0
  • Java8新特性总览

    摘要:新特性总览标签本文主要介绍的新特性,包括表达式方法引用流默认方法组合式异步编程新的时间,等等各个方面。还有对应的和类型的函数连接字符串广义的归约汇总起始值,映射方法,二元结合二元结合。使用并行流时要注意避免共享可变状态。 Java8新特性总览 标签: java [TOC] 本文主要介绍 Java 8 的新特性,包括 Lambda 表达式、方法引用、流(Stream API)、默认方...

    mayaohua 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<