我是Java Lambda函数的新手,所以这个问题可能很简单.

我有一个实体类,并使用Lombok:

@Entity
@Data
public class Product {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;
  private String name;
  
  // getter & setters
  ...

}

然后,我得到了Set<String> data,那里的每个元素代表Product的名字.现在我想把这个data转换成Set<Product> prodcts.我试了两件事:

  1. 我首先try 使用Product的构造函数:
Set<String> data = getData();

//Compiler error:reason: no instance(s) of type variable(s) exist so that String conforms to Product
var products = data.stream().map(Product::new)

但是我不确定如何通过这个Lambda系统错误将参数传递给构造函数,如代码所示.

  1. 然后,我try 直接调用该方法:
Set<String> data = getData();

//Compiler error: Incompatible types: expected not void but compile-time declaration for the method reference has void return type
var products = data.stream().map(Product::setName)

但是我得到了编译器错误Incompatible types: expected not void but compile-time declaration for the method reference has void return type.

那么,使用Lambda函数进行这种转换的正确方式是什么呢?

推荐答案

对于data集合中的每个元素,您可以创建一个新的Product并设置其name,并将结果流收集为Set<Product>.

Set<Product> products = data.stream()
        .map(name -> {
            Product product = new Product();
            product.setName(name);
            return product;
        })
        .collect(Collectors.toSet());

如果在Product类中有一个接受产品名称的构造函数,

public static class Product {
    int id;
    String name;
        
    public Product(String name) {
        this.name = name;
    }

    // getter & setters
}

然后,您可以使用方法引用简化map个步骤.

 Set<Product> products = data.stream()
        .map(Product::new)
        .collect(Collectors.toSet());

Java相关问答推荐

无法运行Java(已解决)

当我用OkHttpClient重写shouldInterceptRequest来发布数据时,Android WebView正在以纯HTML加载URL内容

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

我需要生成一个文件来整合每个特性执行的所有JSON结果

Spring Boot 3.2.2中的@Inject和@Resource Remove

具有多种令牌类型和段的复杂Java 17正则表达式

当Volatile关键字真的是必要的时候?

通过Spring Security公开Spring Boot执行器端点

我可以在MacOS上使用什么Java函数来在适当的设备上以适当的音量播放适当的alert 声音?

Java ArrayList的整数和数组的泛型

使用存储在字符串变量中的路径目录打开.pdf文件

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

Java SSLKeyManager出厂密码

无法播放音频:从资源加载库GStreamer-Lite失败

try 使用类来包含JSON响应

为什么这种递归会有这样的行为?

如何在ApacheHttpClient 5中为单个请求设置代理?

JPA无手术同品种器械可能吗?

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

保持标题窗格的箭头可见,即使设置为不可折叠