java Stream流数组去重方法
时间: 2023-12-31 11:52:42 浏览: 54
Java 8引入了Stream API,使得对集合和数组的处理更加简洁、高效。在Stream中,可以使用distinct()方法来对元素进行去重。
对于数组,可以先将其转换成Stream,再使用distinct()方法进行去重。示例代码如下:
```
int[] arr = {1, 2, 3, 2, 4, 5, 3, 6};
int[] arrDistinct = Arrays.stream(arr).distinct().toArray();
```
以上代码将数组arr转换成Stream,使用distinct()方法进行去重,再将结果转换成数组arrDistinct。最终得到的arrDistinct为{1, 2, 3, 4, 5, 6},去重后的结果。
需要注意的是,数组中的元素必须实现equals()方法和hashCode()方法,才能进行去重。否则,distinct()方法无法正确判断元素是否重复。如果数组中的元素是自定义对象,需要自行实现equals()方法和hashCode()方法。
相关问题
数组去重方法 Java
在 Java 中,有几种常用的数组去重的方法,以下是其中几种常见的方法:
1. 使用 Set:
可以使用 Set 数据结构的特性实现数组去重。首先将数组元素添加到 HashSet 中,然后再将 HashSet 转换回数组。
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 4, 5, 3, 2};
Set<Integer> set = new HashSet<>();
for (int num : array) {
set.add(num);
}
Integer[] resultArray = set.toArray(new Integer[0]);
System.out.println(Arrays.toString(resultArray));
}
}
```
2. 使用 List:
首先创建一个空的 ArrayList,然后遍历数组,将不重复的元素添加到 ArrayList 中,最后再将 ArrayList 转换回数组。
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 4, 5, 3, 2};
List<Integer> list = new ArrayList<>();
for (int num : array) {
if (!list.contains(num)) {
list.add(num);
}
}
Integer[] resultArray = list.toArray(new Integer[0]);
System.out.println(Arrays.toString(resultArray));
}
}
```
3. 使用 Stream:
利用 Java 8 引入的 Stream 特性,可以通过对数组进行流操作来实现去重。
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 4, 5, 3, 2};
int[] resultArray = Arrays.stream(array).distinct().toArray();
System.out.println(Arrays.toString(resultArray));
}
}
```
以上是一些常见的数组去重方法,根据实际需求选择合适的方法使用。
java Stream流数组对象根据某个属性去重方法
可以通过使用Java 8的Stream流和Collectors工具类来根据某个属性去重数组对象。
假设有一个名为Person的类,其中有两个属性name和age,我们想根据name属性去重Person对象数组。
可以使用Stream的distinct()方法和Collectors.toMap()方法来实现:
```
Person[] persons = {new Person("John", 20), new Person("Tom", 25), new Person("John", 30)};
Map<String, Person> map = Arrays.stream(persons)
.distinct()
.collect(Collectors.toMap(Person::getName, Function.identity()));
Person[] result = map.values().toArray(new Person[map.size()]);
```
首先,通过Arrays.stream()方法将Person对象数组转换为Stream流。
然后,使用distinct()方法去重,该方法默认使用对象的equals()方法进行比较。
最后,使用Collectors.toMap()方法将Stream流转换为Map集合,key为Person对象的name属性,value为Person对象本身。
最终,通过Map的values()方法获取不重复的Person对象集合,并将其转换为数组返回。