加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Java 8的更好方法

发布时间:2020-12-15 04:48:02 所属栏目:Java 来源:网络整理
导读:我将以下代码转换为 java 8代码.我想知道我是否做得恰到好处还是有其他不错的方法. Java 7 for (final Category category : categories) { final ListCategory subCategories = getCategories(category); if (subCategories != null) { currentLevel.addAll(
我将以下代码转换为 java 8代码.我想知道我是否做得恰到好处还是有其他不错的方法.

Java 7

for (final Category category : categories) {
      final List<Category> subCategories = getCategories(category);
      if (subCategories != null) {
        currentLevel.addAll(subCategories);
      }
    }

Java8

categories.stream().map(category -> getCategories(category)).filter(list->list!=null).flatMap(cat -> cat.parallelStream()).collect(Collectors.toList())

任何java 8方式将下面的代码解析成紧凑的形式.

while (CollectionUtils.isNotEmpty(currentLevel)) {
  for (final Iterator<Category> iterator = currentLevel.iterator(); iterator.hasNext();) {
    final Category category = iterator.next();
    if (result == null) {
      result = new HashSet<Category>();
    }
    if (!result.add(category)) {
      // avoid cycles by removing all which are already found
      iterator.remove();
    }
  }

  if (currentLevel.isEmpty()) {
    break;
  }
  final Collection<Category> nextLevel = getAllSubcategories(currentLevel);
  currentLevel = nextLevel;
}

解决方法

你的解决方案没问题,只是平行映射到并行流是没用的.如果你看一下OpenJDK / OracleJDK中的 flatMap实现,你可以看到通过传递给flatMap的lambda创建的流会立即变为顺序模式.所以你不会有任何并行性,最好用stream()替换parallelStream()以避免混淆.如果您真的想要并行化工作,通常最好只并行化最外层的流.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读