java8 stream 集合多个字段例子
时间: 2023-11-02 22:53:29 浏览: 45
可以给您举一个Java8 Stream集合多个字段的例子。假设我们有一个Person类,有name、age和city三个字段,我们希望通过Stream对List进行排序,优先按照city升序排序,city相同的再按照age降序排序。代码如下:
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25, "New York"));
persons.add(new Person("Tom", 30, "Beijing"));
persons.add(new Person("Bob", 35, "New York"));
persons.add(new Person("Jack", 30, "Beijing"));
List<Person> sortedPersons = persons.stream()
.sorted(Comparator.comparing(Person::getCity)
.thenComparing(Comparator.comparing(Person::getAge).reversed()))
.collect(Collectors.toList());
这样就可以得到按照city升序和age降序排序后的List了。
相关问题
stream Collectors.groupingBy多个字段分组
stream Collectors.groupingBy多个字段分组是一种Java 8中的流式编程技术,它可以将一个集合按照多个字段进行分组。在这个过程中,我们可以使用Collectors.groupingBy方法来实现多个字段的分组。具体来说,我们可以使用lambda表达式或方法引用来指定分组的字段,然后使用Collectors.groupingBy方法将集合按照这些字段进行分组。例如,我们可以使用以下代码将一个User对象集合按照年龄和性别进行分组:
List<User> userList = new ArrayList<>();
Map<String, List<User>> ageGroupMap = userList.stream().collect(Collectors.groupingBy(x -> x.getAge() + "#" + x.getSex()));
在这个例子中,我们使用lambda表达式指定了分组的字段,即年龄和性别。然后,我们使用Collectors.groupingBy方法将集合按照这些字段进行分组,并将结果存储在一个Map对象中。最终,我们可以通过Map对象来访问分组后的数据。
List集合对象根据多个字段分组,并且用java实现
可以使用Java 8的Stream API来对List集合对象进行分组。假设你有一个List集合对象,其中包含一些自定义对象,对象的属性包含assetName,userAccount,newOSDFlag,accountName四个变量,你可以按如下方式对其进行分组:
```java
List<Asset> assets = ...; // 假设这是你的集合对象
Map<String, List<Asset>> groupedAssets = assets.stream()
.collect(Collectors.groupingBy(asset -> asset.getAssetName() + asset.getUserAccount() + asset.getNewOSDFlag() + asset.getAccountName()));
```
上面的代码中,我们使用了Java 8的Stream API,首先将List对象转换为Stream对象,然后通过调用`collect`方法来对其进行分组。在这个例子中,我们使用了`groupingBy`方法来进行分组,同时使用了lambda表达式来指定分组的key。在lambda表达式中,我们将四个属性拼接成一个字符串作为key,这样就可以根据这四个属性来进行分组了。
分组完成后,会返回一个Map对象,其中key为分组的key,value为对应的List对象,即分组后的结果。
需要注意的是,上面的代码中的Asset对象是一种自定义的数据类型,需要根据你的实际情况进行修改。