stream 自定义distinct
时间: 2023-09-24 16:05:32 浏览: 81
Distinct自定义去重
你可以使用 Java 8 中的 Stream API 来自定义 distinct 操作。
首先,你需要创建一个自定义的函数来比较两个元素是否相等。这个函数需要实现 `java.util.function.BiPredicate` 接口,并重写 `test()` 方法。
例如,假设你想根据字符串的长度来判断两个字符串是否相等,那么你可以这样实现:
```java
BiPredicate<String, String> customEquality = (s1, s2) -> s1.length() == s2.length();
```
接下来,你可以使用 Stream API 的 `distinct()` 方法并传入自定义的比较函数来实现自定义 distinct 操作。例如:
```java
Stream.of("cat", "dog", "bird", "fish", "rat", "lion", "tiger")
.distinct(customEquality)
.forEach(System.out::println);
```
这段代码将输出:
```
cat
dog
bird
fish
lion
```
注意,自定义的比较函数应该符合 equals 方法的一般约定,即具有自反性、对称性和传递性。否则,可能会导致一些意外的结果。
阅读全文