JAVA中有一个[{item_id=1,rating=0.100},{item_id=1,rating=1.100},{item_id=1,rating=0.120}]的数组,根据rating来将这个数组进行降序排序并只获取前10,其中数组中的item_id是字符串类型,rating是BigDecimal类型,
时间: 2023-11-28 09:48:08 浏览: 82
Python库 | whole_history_rating-1.2.1.tar.gz
可以使用Java8的Stream API来完成对数组的排序和筛选操作。
首先,需要将数组转换为Stream对象:
```
Stream<Map<String, Object>> stream = Arrays.stream(array);
```
然后,使用sorted方法对Stream中的元素进行排序,可以使用Comparator.comparing方法指定排序规则:
```
stream = stream.sorted(Comparator.comparing(e -> ((BigDecimal) e.get("rating")).negate()));
```
这里使用了BigDecimal的negate方法将排序规则设置为降序。
接下来,使用limit方法筛选出前10个元素:
```
stream = stream.limit(10);
```
最后,使用collect方法将Stream对象转换为List对象:
```
List<Map<String, Object>> result = stream.collect(Collectors.toList());
```
完整代码如下:
```
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Map<String, Object>[] array = new Map[] {
Map.of("item_id", "1", "rating", new BigDecimal("0.100")),
Map.of("item_id", "1", "rating", new BigDecimal("1.100")),
Map.of("item_id", "1", "rating", new BigDecimal("0.120"))
};
Stream<Map<String, Object>> stream = Arrays.stream(array);
stream = stream.sorted(Comparator.comparing(e -> ((BigDecimal) e.get("rating")).negate()));
stream = stream.limit(10);
List<Map<String, Object>> result = stream.collect(Collectors.toList());
System.out.println(result);
}
}
```
阅读全文