java strem流 拼接每个对象的某个属性,中间用逗号分割,返回一个字符串
时间: 2023-11-27 11:54:10 浏览: 92
假设有一个对象列表 `List<MyObject>`,每个对象都有一个属性 `name`,则可以使用 Java 8 的 Stream API 实现拼接每个对象的 `name` 属性并用逗号分割的操作,示例代码如下:
```
List<MyObject> list = ...; // 初始化对象列表
String names = list.stream()
.map(myObj -> myObj.getName())
.collect(Collectors.joining(","));
System.out.println(names); // 输出拼接后的字符串
```
这里使用了 `Stream` 的 `map` 操作将每个对象映射为其 `name` 属性,然后使用 `Collectors.joining` 操作将这些属性值拼接起来并用逗号分割。最后得到的字符串即为所有对象的 `name` 属性拼接而成。
相关问题
strem流对对象集合的某个字段分组
Java 8中的流可以使用Collectors.groupingBy()方法对对象集合中的某个字段进行分组。假设有一个Person类,其中包含id和name字段,可以使用以下代码根据id字段对Person对象集合进行分组操作:
```
List<Person> personList = new ArrayList<>();
//添加一些Person对象到personList
Map<Long, List<Person>> groupedPersons = personList.stream()
.collect(Collectors.groupingBy(Person::getId));
```
这个代码中,我们使用了Collectors.groupingBy()方法,它接受一个Function参数来提取对象的key,这里我们使用Person::getId方法作为key提取器。它将返回一个Map<Long, List<Person>>,其中key是id,value是包含该id的所有Person对象的列表。
strem流对对象集合的某个字段去重
Java 8中的流可以使用distinct()方法对对象集合中的某个字段进行去重。假设有一个Person类,其中包含id和name字段,可以使用以下代码根据id字段对Person对象集合进行去重操作:
```
List<Person> personList = new ArrayList<>();
//添加一些Person对象到personList
List<Person> distinctPersons = personList.stream()
.filter(distinctByKey(Person::getId))
.collect(Collectors.toList());
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
这个代码中,我们使用了一个自定义的distinctByKey()方法,它返回一个Predicate对象,该对象接受Function参数来提取对象的key。我们使用ConcurrentHashMap来存储已经出现过的key,因为ConcurrentHashMap是线程安全的。最后,我们使用filter()方法将不重复的Person对象留下来,并使用collect()方法将它们收集到一个新的List中。
阅读全文