1.打印列表元素
正常使用
List<String> list = Arrays.asList("a", "b", "c");
for (String str: list){
System.out.println(str);
}
Lambda表达式
list.forEach(e -> System.out.println(e));
方法引用
list.forEach(System.out::println);
2.打印字符串长度
正常使用
List<String> list = Arrays.asList("aa", "b", "ccc");
ArrayList<Integer> lengths = new ArrayList<>();
for (String s : list){
lengths.add(s.length());
}
Lambda表达式
List<Integer> collect = list.stream().map(s -> s.length()).collect(Collectors.toList());
方法引用
List<Integer> collect = list.stream().map(String::length).collect(Collectors.toList());
3.字符串转大写
正常使用
List<String> list = Arrays.asList("a", "b", "c");
List<String> upperCaseList = new ArrayList<>();
for (String s : list) {
upperCaseList.add(s.toUpperCase());
}
Lambda表达式
List<String> upperCaseList = list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
方法引用
List<String> upperCaseList = list.stream().map(String::toUpperCase).collect(Collectors.toList());
4.对象排序
正常使用
person对象
class Person{
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
List<Person> people = new ArrayList<>();
people.add(new Person("aaa"));
people.add(new Person("ddd"));
people.add(new Person("ccc"));
people.add(new Person("bbb"));
Collections.sort(people, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
});
Lambda表达式
people.sort((p1, p2) -> p1.getName().compareTo(p2.getName()));
方法引用
people.sort(Comparator.comparing(Person::getName));
5.过滤列表中的偶数
正常使用
List<Integer> numbers = Arrays.asList(1, 2, 3,3,2,1,7,8,9,6);
List<Integer> evenNumbers = new ArrayList<>();
for (Integer number : numbers) {
if (number % 2 == 0) {
evenNumbers.add(number);
}
}
Lambda表达式
List<Integer> evenNumbersLambda = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
方法引用
方法
class IntegerPredicates {
// 修改 isEven 方法以接受 Integer 参数并返回 boolean
public static boolean isEven(Integer n) {
return n % 2 == 0;
}
}
List<Integer> evenNumbersMethodRef = numbers.stream()
.filter(IntegerPredicates::isEven) // 正确的方法引用
.collect(Collectors.toList());
6.将字符串列表转换为整数列表
正常使用
List<String> list = Arrays.asList("1", "2", "3");
ArrayList<Object> integers = new ArrayList<>();
for (String s:list){
integers.add(Integer.valueOf(s));
}
Lambda表达式
List<Integer> integersLambda = list.stream().map(s -> Integer.valueOf(s)).collect(Collectors.toList());
方法引用
List<Integer> integersMethodRef = list.stream().map(Integer::valueOf).collect(Collectors.toList());
7.创建数组列表
正常使用
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
for (int i = 0; i < list.size(); i++) {
list.set(i, list.get(i) + list.get(i));
}
Lambda表达式
List<String> listLambda = Arrays.asList("a", "b", "c").stream().map(s -> s + s).collect(Collectors.toList());
方法引用
方法
class StringConcatenator {
// 定义一个实例方法,用于将字符串加倍
public static String duplicate(String s) {
return s + s;
}
}
List<String> listMethodRef = Arrays.asList("a", "b", "c").stream()
.map(StringConcatenator::duplicate)
.collect(Collectors.toList());
8.比较两个对象是否相等
正常使用
// 创建两个字符串对象
String str1 = "hello";
String str2 = "hello";
System.out.println(str2.equals(str1));
Lambda表达式
BiPredicate<String, String> isEqualLambda = (s1, s2) -> Objects.equals(s1, s2);
方法引用
BiPredicate<String, String> isEqualMethodRef = Objects::equals;
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 简单案例比较Lambda和方法引用的差别
发表评论 取消回复