Lambda Java-8如何重用lamba表达式

Lambda Java-8如何重用lamba表达式,lambda,java-8,Lambda,Java 8,下面是lambda表达式存在的方法,我希望它也能在其他方法中使用,而不会重复 public FeatureView getFeature(String featurekey) { Feature feature = featureRepository.findByPrimaryKey(featurekey) .orElseThrow(() -> new WebApplicationException(new ResponseEntity<>

下面是lambda表达式存在的方法,我希望它也能在其他方法中使用,而不会重复

    public FeatureView getFeature(String featurekey) {
    Feature feature = featureRepository.findByPrimaryKey(featurekey)
            .orElseThrow(() -> new WebApplicationException(new ResponseEntity<>(
                    ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND)));
    return Feature.getFeatureView(feature, extractFeatureStatus(feature));
}
public FeatureView getFeature(字符串featurekey){
Feature Feature=featureRepository.findByPrimaryKey(featurekey)
.OrelsThrow(()->新Web应用程序异常(新响应)(
servicererror.of(404,String.format(FEATURE\u NOT\u FOUND,featurekey)),HttpStatus.NOT\u FOUND));
返回Feature.getFeatureView(Feature,extractFeatureStatus(Feature));
}
Lamba表达式

() -> new WebApplicationException(new ResponseEntity<>(
                    ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND))
()->新的WebApplicationException(新响应)(
ServiceError.of(404,String.format(FEATURE\u NOT\u FOUND,featurekey)),HttpStatus.NOT\u FOUND))

如果是供应商,只需执行以下操作:

Supplier<WebApplicationException> reusableSupplier = () -> new WebApplicationException(new ResponseEntity<>(
                ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND))
static Supplier<WebApplicationException myReusableException(T featureKey) {
  return () -> new WebApplicationException(.... featureKey);
}
在您的可选通话中,您可以只写以下内容:

.orElseThrow(YourClass::myReusableException);
编辑:如果要向其传递变量,我将使用方法变量并将其更改为以下内容:

Supplier<WebApplicationException> reusableSupplier = () -> new WebApplicationException(new ResponseEntity<>(
                ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND))
static Supplier<WebApplicationException myReusableException(T featureKey) {
  return () -> new WebApplicationException(.... featureKey);
}
正如您所看到的,使用返回值可能会产生有趣的结果。您也可以使用
函数
,但我认为这很快就会变得混乱。为了完成,我将添加一个
函数
-变量,而不返回
供应商

Function<T, Exception> yourReusableFunction = featureKey -> new  WebApplicationException(.... featureKey); // where T is the type of featureKey
简单地说:

Supplier<Exception> excSupplier = () -> new WebApplicationException(new ResponseEntity<>(
  ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND));
Supplier exc Supplier=()->新的WebApplicationException(新响应)(
ServiceError.of(404,String.format(FEATURE_NOT_FOUND,featurekey)),HttpStatus.NOT_FOUND));

然后,您可以在任何需要的地方使用
excSupplier

这里介绍了如何做到这一点,不仅是在这种特殊情况下,而且是在一般情况下

您可能知道,lambda表达式可以用作函数接口类型的值,如
消费者
供应商
函数
等。因此,第一步是确定lambda表达式的类型。在这里,你有:

() -> new WebApplicationException(new ResponseEntity<>(
        ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND))
现在,您可以使用这个新变量代替lambda。只需将lambda表达式替换为您指定的名称即可。在您的情况下,这将是:

Feature feature = featureRepository.findByPrimaryKey(featurekey)
        .orElseThrow(supplier);
return Feature.getFeatureView(feature, extractFeatureStatus(feature));

谢谢如何将featurekey(变量)传递给此供应商?谢谢。如何将featurekey(变量)传递给此供应商?@Shoaib627您不能传递它。您需要将此答案中的代码放在与
featureKey
@Ronald相同的范围内,这是执行myReusableException或yourReusableFunction的正确方法?myReusableException看起来更干净me@Shoaib627如果你认为答案回答了你的问题,请考虑通过点击那个标记来接受它!
Supplier<WebApplicationException> supplier = 
    () -> new WebApplicationException(new ResponseEntity<>(
        ServiceError.of(404, String.format(FEATURE_NOT_FOUND, featurekey)), HttpStatus.NOT_FOUND));
Feature feature = featureRepository.findByPrimaryKey(featurekey)
        .orElseThrow(supplier);
return Feature.getFeatureView(feature, extractFeatureStatus(feature));