s1 = lambda x:print(x);
def s2(x):
print(x);
s1("123");
s2("123");
123
123
ls = [1,2,3,4,5,6,7,8,9];
def isOu(x):
return x%2 == 0;
ls2 = filter(isOu,ls)
print(list(ls2))
ls2 = filter(lambda x:x%2==0,ls);
print(list(ls2))
[2, 4, 6, 8]
[2, 4, 6, 8]
【Java内容延伸,扩展】:
String[] sa = {"1","23","3","110","86","9","10"};
//按照数字的大小来排序;
//不能使用默认排序方式,指定排序规则
//第1层
//两个参数,第一个是要排序的数组;第二个是Comparator接口类型【比较器】
//接口需要使用类来实现
Comparator<String> mycp = new MyComparator();//多态
Arrays.sort(sa,mycp);
//第2层
//在第一层的写法中,我需要额外的在外部创建一个.java文件,有可能这个类就使用这一次
//这就显得有点啰嗦、臃肿!
//通过“匿名内部类”,不在外部创建.java文件了
Arrays.sort(sa,new Comparator<String>() { //new 接口(){方法实现}
@Override
public int compare(String o1, String o2) {
return Integer.parseInt(o1)-Integer.parseInt(o2);
}});
//第3层:
//第二层写法,看起来好麻烦啊,在jdk1.8版本中,对写法2,进一步优化,引入了Lambda表达式的形式
//java中的Lambda: (参数)->{方法体}
//进一步简便:参数类型可以不要;方法体如果只有一句话,那么大括号和return都可以不要;
Arrays.sort(sa,
(o1,o2)-> Integer.parseInt(o1)-Integer.parseInt(o2)
);
System.out.println(Arrays.toString(sa));
对比Python和Java中的Lambda的不同:
1、写法
python:
lambda 参数:一条函数体语句
java:
(参数)->{函数体}
函数体如果是单一语句,也可以省略大括号
2、作用
python:
lambda是对函数的一种实现方式
java:
lambda是接口的一种实现方式
Comparator<String> cmp = (o1,o2)-> Integer.parseInt(o1)-Integer.parseInt(o2) ;
3、函数式编程
python中函数可以直接作用参数
java中函数不能直接作为参数,但可以使用lambda实现的接口作为参数
Arrays.sort(sa,(o1,o2)-> Integer.parseInt(o1)-Integer.parseInt(o2));