1. Function接口介绍
详细介绍:http://t.csdn.cn/3U1Yx
简单测试:
package ClassLearn;
import java.util.function.Function;
public class MyFunction {
public static void main(String[] args) {
/*lambda表达式*/
Function<Integer,Integer> test1= (i)->i+1;
Function<Integer,Integer> test2=(i)->i*i;
System.out.println(calculate(test1,5));
System.out.println(calculate((i)->i*i,5));
}
/*T:是输入数据类型
* R:是返回数据类型
* */
//相当于返回 y=f(x)
public static <T,R> Integer calculate(Function<T,R> test,T number){
return new Integer((int)test.apply(number));
}
}
2 . 分组实现
package test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
public class FunctionTest {
static class Person{
private String name;
private String country;
private int age;
public Person(String name,String country, int age) {
this.name = name;
this.age = age;
this.country =country;
}
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", conuntry='" + country + '\'' +
", age=" + age +
'}';
}
}
/*要实现按国家分组*/
public static void main(String[] args) {
Person p1=new Person("小林","中国",25);
Person p2=new Person("小P","中国",23);
Person p3=new Person("小F","美国",24);
Person p4=new Person("小明","美国",22);
List<Person> list=new ArrayList<>();
list.add(p1);list.add(p2);list.add(p3);list.add(p4);
/*lambda表达式*/
Function<Person,String> function=(country)-> country.getCountry();
Map<Object,List<Person>> splitMap=splitByCountry(list,function);
splitMap.forEach((key,person)-> System.out.println(key+":"+person));
}
/*分组*/
public static <T,R> Map<Object, List<T>> splitByCountry(List<T> datas, Function<T,R> function){
Map<Object,List<T>> map=new HashMap<>();
/*取出list中每一个person(data)*/
for(T data: datas){
/*获取键值(country)*/
List<T> key=map.get(function.apply(data));
/*map中已经存放了该键值*/
if(key!=null)
{
/*同一类键值person放一起*/
key.add(data);
}
else {
/*map中还没有存放该键值*/
List<T> group=new ArrayList<>();
group.add(data);
map.put(function.apply(data),group);
}
}
return map;
}
}
运行结果!