在Java Stream中清理此条件?

时间:2018-03-07 22:30:18

标签: java java-8 java-stream

我有这个很长的Java流,但在这里抛出一个看起来不合适的条件:

...
    .filter(desc -> !hiddenFields.contains(desc.getName()))
    .forEach(
        desc -> {
          if (requestedFields.isEmpty()
              || requestedFields.contains(desc.getName())) {
            allAttributes.add(desc);
          }
        }));

requestedFields是HashSet<String>。有什么更漂亮的吗?

1 个答案:

答案 0 :(得分:2)

allAttributes = stream.filter(desc -> !hiddenFields.contains(desc.getName()))
.filter(desc -> requestedFields.isEmpty()
          || requestedFields.contains(desc.getName()))
.collect(Collectors.toList());

正如问题评论中所指出的,您可以使用Collectors.toCollection(...)代替.toList(),具体取决于allAttributes的类型