我有一个List<Valuta>可以表示(简化)JSON风格:
[{codice = EUR,description = Euro,ratio = 1},{codice = USD,description = Dollars,ratio = 1.1}]
我想用这样的方式改变它Map<String, Valuta>:
{EUR = {codice = EUR,description = Euro,ratio = 1},USD = {codice = USD,description = Dollars,ratio = 1.1}}
我写了这个单行:
getValute().stream().collect(Collectors.groupingBy(Valuta::getCodice));
Run Code Online (Sandbox Code Playgroud)
但这会返回一个Map<String, List<Valuta>>而不是我需要的东西.
我认为mapping()功能对我有用,但不知道如何.
我有一个包含其他对象列表的对象,我想返回由容器的某些属性映射的包含对象的平面图.任何一个是否可以只使用流和lambdas?
public class Selling{
String clientName;
double total;
List<Product> products;
}
public class Product{
String name;
String value;
}
Run Code Online (Sandbox Code Playgroud)
让我们来处理一系列操作:
List<Selling> operations = new ArrayList<>();
operations.stream()
.filter(s -> s.getTotal > 10)
.collect(groupingBy(Selling::getClientName, mapping(Selling::getProducts, toList());
Run Code Online (Sandbox Code Playgroud)
结果将是善意的
Map<String, List<List<Product>>>
Run Code Online (Sandbox Code Playgroud)
但我想像它一样扁平化
Map<String, List<Product>>
Run Code Online (Sandbox Code Playgroud)