JAVA8为每个循环两个流

时间:2017-04-13 06:51:05

标签: loops java-8 java-stream

你好我有两个循环遍历列表并使用switch设置name属性,但我想重构并使用流而不知道如何去做:

这是代码段

for (ClaimDTO claimDTO: claimDTOs) {
    for (CategoryDTO categoryDTO : claimDTO.getCategories()) {
        switch (categoryDTO.getCategoryType()) {
            case "ALLOWANCE": {
                categoryDTO.setName("Flight");
                break;
            }
            case "MILEAGE": {
                categoryDTO.setyName("Car");
                break;
            }
            default:
                categoryDTO.setName("Expenses");

         }
    }
}

我应该创建解析名称的功能,只是在流中使用它,或者它甚至不值得,也不会保存LOC。

1 个答案:

答案 0 :(得分:1)

您可以使用flatMap在单个流中获取所有类别dtos:

claimDTOs.stream()
    .flatMap(claim -> claim.getCategories().stream())
    .forEachOrdered(this::setName);

forEachOrdered然后获取为每个元素执行的Consumer,并且可以作为方法引用(双冒号)引用。

private void setName(CategoryDTO categoryDTO) {
    switch (categoryDTO.getCategoryType()) {
        case "ALLOWANCE": {
            categoryDTO.setName("Flight");
            break;
        }
        case "MILEAGE": {
            categoryDTO.setName("Car");
            break;
        }
        default:
            categoryDTO.setName("Expenses");

    }
}