Java8新特性-函数式接口(第二天)
这一节学一下用得比较多的三个函数式接口: Predicatejava.util.function.Predicate
public static <T> List<T> filter(List<T> list,Predicate<T> p) { List<T> results = new ArrayList<>(); for(T s: list){ if(p.test(s)){ results.add(s); } } return results; } List<String> listOfStrings = new ArrayList<>(); listOfStrings.add(""); listOfStrings.add("a"); Predicate<String> nonEmptyStringPredicate = (String s) -> !s.isEmpty(); List<String> nonEmpty = filter(listOfStrings,nonEmptyStringPredicate); nonEmpty.forEach(System.out::println); 剩余两个函数就不一一举例了。 Consumerjava.util.function.Consumer
Functionjava.util.function.Function<T,R>接口定义了一个叫作apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象。 拓展: 原始类型特化 装箱后的值本质上就是把原始类型包裹起来,并保存在堆里。因此,装箱后的值需要更多的内存,并需要额外的内存搜索来获取被包裹的原始值。 Java 8为我们前面所说的函数式接口带来了一个专门的版本,以便在输入和输出都是原始类型时避免自动装箱的操作。比如,在下面的代码中,使用IntPredicate就避免了对值1000进行装箱操作,但要是用Predicate
IntPredicate evenNumbers = (int i) -> i % 2 == 0; evenNumbers.test(1000); // 无装箱 Predicate<Integer> oddNumbers = (Integer i) -> i % 2 == 1; oddNumbers.test(1000); // 有装箱 ps: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- servlet上传文件实现代码详解(四)
- Java exception handling best practices--转载
- java – Gwt请求构建器 – 如何返回响应字符串
- 通过锁定在Java中实现线程安全的ArrayList
- 我可以用Java中的文件构建结果集吗?
- java – 使用@JsonSubTypes反序列化没有值 – 缺
- java – exec-maven-plugin表示无法运行指定的程
- Garbage Collectors - Serial vs. Parallel vs.
- java – 为什么没有调用实现Runnable接口的类的构
- HttpServlet中getAllDeclaredMethods()方法