代码之家  ›  专栏  ›  技术社区  ›  Stéphane GRILLON

具有泛型类型的流映射

  •  0
  • Stéphane GRILLON  · 技术社区  · 5 年前

    我希望在Java 8中创建新代码后清理声纳问题。

    public class Argument<T> {
        ...
        public T getValue() {
            return parameterType.transform(group.getValues());
        }
        ...
    }
    

    我的代码:

     List<Argument<?>> args = expression.match(text);
     return args == null ? null : args.stream().map(arg -> arg.getValue()).collect(Collectors.toList());
    

    声纳说:

    lambdas应替换为方法引用。方法/构造函数引用比使用lambdas更紧凑和可读,因此是首选。类似地,空检查可以替换为对objects::isnull和objects::nonnull方法的引用。

    我想要零钱 map(arg -> arg.getValue()) 通过 map(T::getValue()) 但它是否编译错误。

    1 回复  |  直到 5 年前
        1
  •  2
  •   Ousmane D.    5 年前

    应该用方法引用替换lambdas

    改变

    .map(arg -> arg.getValue())
    

    .map(Argument::getValue)
    

    至于:

    类似地,空检查可以替换为对 objects::isnull和objects::nonnull方法

    我以前没用过声纳,但如果它喜欢用 Objects.isNull Objects.nonNull 对于空检查,则需要执行以下操作:

    return Objects.isNull(args) ? null : args.stream()
                    .map(Argument::getValue)
                    .collect(Collectors.toList());