Java 8 一元运算符UnaryOperator and BinaryOperator Example
2017-12-13 18:12
513 查看
Java 8介绍了UnaryOperator和BinaryOperator可以用于指定作为lambda表达式。 UnaryOperator与BinaryOperator是函数式接口。二者根据传入的参数决定了UnaryOperator继承了Function并且BinaryOperator继承了BiFunction. UnaryOperator接受一个操作符并返回相同类型的值。BinaryOperator接收两个操作数返回一个相同类型的值。
java.util.function.UnaryOperator是java 8的函数式接口,继承于java.util.function.Function。UnaryOperator接收一个参数,并返回类型的参数。 UnaryOperator作为lambda表达式传递一个参数。使用UnaryOperator时,需要定义Function.apply(Object),实例会是UnaryOperator的实例。例子如下
UnaryOperatorDemo.java
Find the output.
java.util.function.BinaryOperator是函数式接口,并且是lambda表达式。BinaryOperator继承自 java.util.function.BiFunction。接收两个参数返回一个相同类型的值。例子如下
BinaryOperatorDemo.java
Find the output.
BinaryOperator.maxBy accepts a Compotator and returns BinaryOperator which will return maximum between two elements. In the same way, BinaryOperator.minBy is used
to get minimum between two elements.
MaxByMinBy.java
Find the Student class used in Example.
Student.java
Find the output.
UnaryOperator
java.util.function.UnaryOperator是java 8的函数式接口,继承于java.util.function.Function。UnaryOperator接收一个参数,并返回类型的参数。 UnaryOperator作为lambda表达式传递一个参数。使用UnaryOperator时,需要定义Function.apply(Object),实例会是UnaryOperator的实例。例子如下 UnaryOperatorDemo.java
package com.concretepage.util.stream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.UnaryOperator; public class UnaryOperatorDemo { public static void main(String[] args) { List<Integer> list = Arrays.asList(10,20,30,40,50); UnaryOperator<Integer> unaryOpt = i->i*i; unaryOperatorFun(unaryOpt, list).forEach(x->System.out.println(x)); } private static List<Integer> unaryOperatorFun(UnaryOperator<Integer> unaryOpt, List<Integer> list){ List<Integer> uniList = new ArrayList<>(); list.forEach(i->uniList.add(unaryOpt.apply(i))); return uniList; } }
Find the output.
100 400 900 1600 2500
BinaryOperator
BinaryOperator
java.util.function.BinaryOperator是函数式接口,并且是lambda表达式。BinaryOperator继承自 java.util.function.BiFunction。接收两个参数返回一个相同类型的值。例子如下
BinaryOperatorDemo.java
package com.concretepage.util.stream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.BinaryOperator; public class BinaryOperatorDemo { public static void main(String[] args) { Map<String,String> map = new HashMap<>(); map.put("X", "A"); map.put("Y", "B"); map.put("Z", "C"); BinaryOperator<String> binaryOpt = (s1,s2)-> s1+"-"+s2; binaryOperatorFun(binaryOpt, map).forEach(x->System.out.println(x)); } private static List<String> binaryOperatorFun(BinaryOperator<String> binaryOpt, Map<String,String> map){ List<String> biList = new ArrayList<>(); map.forEach((s1,s2)->biList.add(binaryOpt.apply(s1,s2))); return biList; } }
Find the output.
X-A Y-B Z-C
BinaryOperator.maxBy and BinaryOperator.minBy
BinaryOperator.maxBy accepts a Compotator and returns BinaryOperator which will return maximum between two elements. In the same way, BinaryOperator.minBy is usedto get minimum between two elements.
MaxByMinBy.java
package com.concretepage.util; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.BinaryOperator; import java.util.stream.Collectors; public class MaxByMinBy { public static void main(String[] args) { Student s1 = new Student("Shyam", 22,"A"); Student s2 = new Student("Ram",23,"A"); Student s3 = new Student("Mohan",22,"B"); Student s4 = new Student("Ramesh",21,"B"); List<Student> list = Arrays.asList(s1,s2,s3,s4); Comparator<Student> ageComparator = Comparator.comparing(Student::getAge); //Using BinaryOperator.maxBy System.out.println("---BinaryOperator.maxBy---"); Map<String, Optional<Student>> eldestByClass = list.stream().collect(Collectors.groupingBy(Student::getClassName, Collectors.reducing(BinaryOperator.maxBy(ageComparator)))); eldestByClass.forEach((k,v)->System.out.println("Class:"+k+" Age:"+ ((Optional<Student>)v).get().getAge()+" Name:"+((Optional<Student>)v).get().getName())); //Using BinaryOperator.minBy System.out.println("---BinaryOperator.minBy---"); Map<String, Optional<Student>> youngestByClass = list.stream().collect(Collectors.groupingBy(Student::getClassName, Collectors.reducing(BinaryOperator.minBy(ageComparator)))); youngestByClass.forEach((k,v)->System.out.println("Class:"+k+" Age:"+ ((Optional<Student>)v).get().getAge()+" Name:"+((Optional<Student>)v).get().getName())); } }
Find the Student class used in Example.
Student.java
package com.concretepage.util; public class Student { private String name; private Integer age; private String className; public Student(String name,Integer age, String className){ this.name=name; this.age=age; this.className = className; } public String getName() { return name; } public Integer getAge() { return age; } public String getClassName() { return className; } }
Find the output.
---BinaryOperator.maxBy--- Class:A Age:23 Name:Ram Class:B Age:22 Name:Mohan ---BinaryOperator.minBy--- Class:A Age:22 Name:Shyam Class:B Age:21 Name:Ramesh
相关文章推荐
- 标准模板库介绍(一元及二元函数对象Unary and Binary Function Objects)
- 106. Construct Binary Tree from Inorder and Postorder Traversal | Java最短代码实现
- Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度 [java]
- [LeetCode][Java] Construct Binary Tree from Inorder and Postorder Traversal
- leetcode-java-106. Construct Binary Tree from Inorder and Postorder Traversal
- Binary, Octal, and Hexadecimal Conversions in Java
- [Leetcode] Construct Binary Tree from Inorder and Postorder Traversal (Java)
- [leetcode-297]Serialize and Deserialize Binary Tree(java)
- error: invalid operands of types 'int()' and 'int' to binary 'operator%'
- Construct Binary Tree from Preorder and Inorder Traversal (Java)
- construct-binary-tree-from-preorder-and-inorder-traversal Java code
- PAT Advanced Level 1043. Is It a Binary Search Tree (25)(Java and C++)
- [leetcode-105]Construct Binary Tree from Preorder and Inorder Traversal(java)
- Java SFTP Apache commons file download, upload and delete example
- Construct Binary Tree from Preorder and Inorder Traversal Java
- Difference Between String , StringBuilder And StringBuffer Classes With Example : Java
- 【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal【java】
- Java语言一元运算符实例解析
- Java: 实例 Example for Java Date and Calendar
- Java Deadlock Example and How to analyze deadlock situation