Могу ли я создать список, используя потоки, где критерии должны проверить один список, а затем добавить объект в другой список? - PullRequest
1 голос
/ 04 мая 2020

Есть ли более элегантный способ сделать это с помощью потоков, в java 8? Можете ли вы дать мне несколько советов о том, какие части документации я должен смотреть? Я думал, что можно было бы сделать это без создания сначала пустого featureList, но я не могу заставить его работать.

Здесь есть два уровня возможностей, общие c доступные функции на всех устройствах и функциях, которые специально включены на этом устройстве, поскольку, даже если они доступны, их можно отключить для определенных c устройств, если мы того пожелаем.

public List<DeviceFeature> getAllEnabledFeatures(DeviceID deviceId){
    List<String> featureNames =  getAllEnabledDeviceFeatures(deviceId);
    List<DeviceFeature> featureList = new ArrayList<>();

    featureNames.forEach(featureName -> {
        DeviceFeature feature = getDeviceFeatureEnabledForDevice(featureName, deviceId);
        if(feature != null) featureList.add(feature);
    });
    return featureList;
}

1 Ответ

5 голосов
/ 04 мая 2020

Вам не нужно forEach, вы можете создать список напрямую, сопоставив featureNames:

return  getAllEnabledDeviceFeatures(deviceId)
        .stream()
        .map(featureName -> 
                getDeviceFeatureEnabledForDevice(featureName, deviceId))
        .filter(Objects::nonNull)
        .collect(Collectors.toList());
...