list.stream()分组
时间: 2023-10-24 15:32:51 浏览: 94
list.stream()可以使用groupingBy()方法对元素进行分组。在Java中,可以使用Collectors.groupingBy()来实现对流中元素的分组操作。例如,如果有一个名为userList的List<User>,可以使用以下代码将用户按照部门进行分组:
Map<String, List<User>> userMap = userList.stream()
.collect(Collectors.groupingBy(User::getDepartment));
这将返回一个Map<String, List<User>>,其中键是部门名,值是属于该部门的用户列表。可以通过遍历Map来查看分组后的结果。例如:
userMap.forEach((key, value) -> {
System.out.println(key + ":");
value.forEach(System.out::println);
System.out.println("---------------------------------------------");
});
这样就可以按部门将用户列表进行分组了。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关问题
List.stream分组
List.stream()是Java 8引入的一个新特性,它允许我们对集合进行流式操作。而List.stream().collect(Collectors.groupingBy())则是一种分组操作,可以将集合中的元素按照指定的条件进行分组。
具体来说,List.stream().collect(Collectors.groupingBy())方法接受一个Function作为参数,该函数用于指定分组的条件。它会将集合中的元素按照该条件进行分组,并返回一个Map对象,其中键是分组的条件,值是对应的元素列表。
下面是一个示例代码,演示了如何使用List.stream().collect(Collectors.groupingBy())进行分组:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupingExample {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("apple", "banana", "orange", "apple", "grape", "banana");
Map<String, List<String>> groupedFruits = fruits.stream()
.collect(Collectors.groupingBy(fruit -> fruit));
System.out.println(groupedFruits); }
}
```
输出结果为:
```
{orange=[orange], banana=[banana, banana], apple=[apple, apple], grape=[grape]}
```
在上述示例中,我们将水果列表按照水果名称进行了分组。可以看到,相同名称的水果被放在了同一个列表中。
List.stream分组求和
List.stream分组求和是一种常见的数据处理操作,它可以将一个List中的元素照某个属性进行分组,并对每个分组中的元素进行求和操作。下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建一个包含多个Person对象的List
List<Person> personList = Arrays.asList(
new Person("Alice", "A", 100),
new Person("Bob", "A", 200),
new Person("Charlie", "B", 300),
new Person("David", "B", 400),
new Person("Eve", "C", 500)
);
// 使用stream进行分组求和
Map<String, Integer> sumByGroup = personList.stream()
.collect(Collectors.groupingBy(Person::getGroup, Collectors.summingInt(Person::getScore)));
// 输出结果
sumByGroup.forEach((group, sum) -> System.out.println(group + ": " + sum));
}
}
class Person {
private String name;
private String group;
private int score;
public Person(String name, String group, int score) {
this.name = name;
this.group = group;
this.score = score;
}
public String getName() {
return name;
}
public String getGroup() {
return group;
}
public int getScore() {
return score;
}
}
```
上述代码中,我们创建了一个包含多个Person对象的List,并使用stream对其进行操作。通过`Collectors.groupingBy`方法,我们可以按照Person对象的group属性进行分组,然后使用`Collectors.summingInt`方法对每个分组中的score属性进行求和。最后,我们将结果存储在一个Map中,并输出每个分组的求和结果。
阅读全文