Java stream 对元素为对象的list根据uuid去重
时间: 2023-04-10 11:03:17 浏览: 119
可以使用Java 8中的stream和Collectors工具类来实现对元素为对象的list根据uuid去重的操作,具体代码如下:
```
List<Object> list = new ArrayList<>();
// 添加元素到list中
List<Object> distinctList = list.stream()
.filter(distinctByKey(obj -> obj.getUuid()))
.collect(Collectors.toList());
// 去重方法
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
这段代码使用了Java 8中的stream方法,通过filter方法和distinctByKey方法实现对元素为对象的list根据uuid去重的操作。
相关问题
java中使用stream往集合对象添加多个属性值
可以使用Java 8中的Stream API和lambda表达式来添加集合对象的多个属性值。假设我们有一个Person类,有name、age和gender三个属性,我们可以使用以下代码将多个Person对象添加到List集合中:
```
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", 25, "female"));
people.add(new Person("Bob", 30, "male"));
people.add(new Person("Charlie", 20, "male"));
```
如果我们想要添加每个人的ID属性,可以使用Stream API的map方法,将每个Person对象映射为一个新的Person对象,并在其中添加ID属性。例如,我们可以使用以下代码:
```
List<Person> peopleWithIds = people.stream()
.map(person -> {
person.setId(UUID.randomUUID().toString());
return person;
})
.collect(Collectors.toList());
```
在上面的代码中,我们使用UUID生成一个唯一的ID字符串,并将其设置为每个Person对象的ID属性。然后,我们使用collect方法将Stream转换为List集合,以便我们可以访问所有添加了ID属性的Person对象。
类似地,我们可以使用Stream API和lambda表达式来添加其他属性值,例如日期、地址等等。只需在map方法中创建一个新的Person对象,并设置所需的属性即可。
java uuid
Java中的UUID是一个标准的32位长度的字符串,用于唯一标识一个对象。Java中可以使用java.util.UUID类来生成UUID。以下是两种生成UUID的方法:
1.使用java.util.UUID类生成UUID
```java
import java.util.UUID;
public class UUIDGenerator {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid.toString().replace("-", ""));
}
}
```
2.使用第三方库JUG生成UUID
```java
import com.fasterxml.uuid.Generators;
import com.fasterxml.uuid.impl.TimeBasedGenerator;
public class UUIDGenerator {
public static void main(String[] args) {
TimeBasedGenerator gen = Generators.timeBasedGenerator();
UUID uuid = gen.generate();
System.out.println(uuid.toString().replace("-", ""));
}
}
```