比方说,我有一个对象列表,可以将此对象称为具有数量和价格作为字段的对象订单。
例如如下:
对象Order
(字段quantity
和price
)列表包含以下值:
Quantity Price
5 200
6 100
3 200
1 300
现在,我想使用Java-8来获取以以下方式过滤的列表:
Quantity Price
8 200
6 100
1 300
价格是要从中过滤并求和价格的任何数量的唯一值,我想以此为基础形成新列表。
谢谢,我建议如何使用Java 8 lambda表达式来做到这一点。
答案 0 :(得分:9)
以下import json
import pandas as pd
from pandas.io.json import json_normalize
result_data = [
{
"title": "Czech Republic",
"group_dimensions": {
"content": {
"key": "123456789",
"title": "Some Book"
},
"store_front_ica": {
"key": "143489",
"title": "Czech Republic"
}
},
"data": [
{
"date": "2019-03-17T00:00:00.000Z",
"units": 0.0
},
{
"date": "2019-03-24T00:00:00.000Z",
"units": 10.0
},
{
"date": "2019-03-31T00:00:00.000Z",
"units": 13.0
}
],
"key": "143489",
"metadata": {
"key": "143489",
"title": "Czech Republic"
}
},
{
"title": "Romania",
"group_dimensions": {
"content": {
"key": "123456789",
"title": "Some Book"
},
"store_front_ica": {
"key": "143487",
"title": "Romania"
}
},
"data": [
{
"date": "2019-03-17T00:00:00.000Z",
"units": 0.0
},
{
"date": "2019-03-24T00:00:00.000Z",
"units": 0.0
},
{
"date": "2019-03-31T00:00:00.000Z",
"units": 200.0
}
],
"key": "143487",
"metadata": {
"key": "143487",
"title": "Romania"
}
}
]
可以达到目的:
Stream
让我们分解一下:
以下代码返回一个List<Order> o = orders.stream().collect(
Collectors.collectingAndThen(
Collectors.groupingBy(Order::getPrice,Collectors.summingInt(Order::getQuantity)),
map -> map.entrySet().stream()
.map(e -> new Order(e.getKey(), e.getValue()))
.collect(Collectors.toList())));
,其中包含价格作为键(要作为总和的唯一值)及其总数量。密钥方法为Collectors.groupingBy
,其中Map<Integer, Integer>
描述密钥,而classifier
定义一个值,该值将是数量的总和,因此Collectors.summingInt
(取决于{{1 }}类型):
downstream
所需的结构为quantity
,因此您想对Map<Integer, Integer> map = orders.stream().collect(
Collectors.groupingBy( // I want a Map<Integer, Integer>
Order::getPrice, // price is the key
Collectors.summingInt(Order::getQuantity)) // sum of quantities is the value
和List<Order>
使用Collectors.collectingAndThen
方法。 Collector<T, A, R> downstream
是从第一点开始的分组,整理器将Function<R, RR> finisher
转换回downstream
:
Map<Integer, Integer>