java基础之lamda表达式

q1871901600 发布于 2024-10-23 16 次阅读


一,去重

首先,假设你有一个用户类User,其中包含手机号属性phoneNumber

javapublic class User {
    private String name;
    private String phoneNumber;

    // 构造器、getter和setter省略
}

然后,你可以使用Stream API和Collectors.toMap方法来根据手机号去重:

javaimport java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
public static void main(String[] args) {
List<WebUser> users = null;// 假设这是你的用户信息列表

Map<String, WebUser> uniqueUsersMap = users.stream()
.collect(Collectors.toMap(
WebUser::getPhone, // key映射函数,这里使用手机号作为key
user -> user, // value映射函数,这里直接使用User对象
(existing, replacement) -> existing // 合并函数,如果有重复的key,保留现有的
));

List<WebUser> uniqueUsers = uniqueUsersMap.values().stream().collect(Collectors.toList());
// 现在uniqueUsers包含了去重后的用户信息列表
}
}

在这段代码中,Collectors.toMap方法接受三个参数:

  1. Key映射函数:这里使用User::getPhoneNumber作为key,即每个用户的手机号。
  2. Value映射函数:这里直接使用user -> user,即每个用户的整个对象。
  3. 合并函数:当有重复的key时,需要决定如何处理。在这里,我们使用(existing, replacement) -> existing,意味着如果有重复的手机号,保留第一个遇到的用户信息。

二,peek 方法

peek方法用于在流的每个元素上执行一个操作,但是并不改变流中的元素。这个方法主要用于调试目的,因为它允许你查看流中的元素。peek方法不会改变流的状态,它仅仅在每个元素上执行一个操作。

peek方法的签名如下:

javaStream<T> peek(Consumer<? super T> action)
  • T 是流中元素的类型。
  • Consumer<? super T> 是一个函数接口,它接受一个T类型的参数,并执行一个操作。

一个使用peek方法的例子:

javaList<String> words = Arrays.asList("a", "b", "c");
words.stream()
    .peek(System.out::println) // 打印每个元素
    .filter(s -> s.length() > 1)
    .forEach(System.out::println); // 只打印长度大于1的元素

在这个例子中,peek方法用于打印流中的每个元素,然后filter方法用于过滤出长度大于1的元素,最后forEach方法用于打印这些过滤后的元素。

三,map 方法

map方法用于将流中的每个元素映射到另一个元素上,它可以改变流中元素的类型。map方法接受一个函数作为参数,这个函数会被应用到流中的每个元素上,并将结果收集到一个新的流中。

map方法的签名如下:

java<R> Stream<R> map(Function<? super T, ? extends R> mapper)
  • T 是流中元素的类型。
  • R 是映射后流中元素的类型。
  • Function<? super T, ? extends R> 是一个函数接口,它接受一个T类型的参数,并返回一个R类型的结果。

一个使用map方法的例子:

javaList<String> words = Arrays.asList("1", "2", "3");
List<Integer> numbers = words.stream()
    .map(Integer::parseInt) // 将每个字符串转换为整数
    .collect(Collectors.toList());

在这个例子中,map方法用于将字符串列表中的每个元素转换为整数,然后收集到一个新的列表中。

一个会写python的Java工程师
最后更新于 2024-10-24