Java 如何访问流中的getter和setter
我有一个方法,它接受一个json对象并将其插入aws弹性搜索服务,但我想编写另一个方法,它接受多个json对象并将它们插入aws弹性搜索Java 如何访问流中的getter和setter,java,spring,spring-boot,java-8,java-stream,Java,Spring,Spring Boot,Java 8,Java Stream,我有一个方法,它接受一个json对象并将其插入aws弹性搜索服务,但我想编写另一个方法,它接受多个json对象并将它们插入aws弹性搜索 /** * Create the Product in ElasticSearch * * @param product The Product * @return The response string * @throws JsonProcessingException Throws JsonProcessingException when res
/**
* Create the Product in ElasticSearch
*
* @param product The Product
* @return The response string
* @throws JsonProcessingException Throws JsonProcessingException when response cannot be parsed
*/
public String createNewProduct(Product product) throws JsonProcessingException {
final ObjectMapper objectMapper = new ObjectMapper();
final String json = objectMapper.writeValueAsString(product);
if (json != null) {
AwsResponse response = createDocument(ElasticSearchConstants.PRODUCTS_INDEX,
ElasticSearchConstants.PRODUCTS_DOCUMENT_TYPE,
json,
product.getPartNo());
// Creating a new document not seen before results in a 201 status, where as overwriting a previous document results in a 200
if (response != null && (response.getHttpResponse().getStatusCode() == HttpStatus.CREATED.value()
|| response.getHttpResponse().getStatusCode() == HttpStatus.OK.value())) {
LOGGER.info("Successfully created new Product", product.getPartNo(), product.getLevelOne());
return product.getPartNo();
}
}
return null;
}
/**
* Create new Products in ElasticSearch
* @param products The product
* @throws JsonProcessingException Throws JsonProcessingException when response cannot be parsed
*/
public String createNewProducts(ArrayList<Product> products) throws JsonProcessingException{
final ObjectMapper objectMapper = new ObjectMapper();
products.stream()
.map(product -> {
try {
return objectMapper.writeValueAsString(product);
} catch (JsonProcessingException e) {
return new JsonProcessingException(e){};
}
})
.forEach(product -> {
createDocument(ElasticSearchConstants.PRODUCTS_INDEX,
ElasticSearchConstants.PRODUCTS_DOCUMENT_TYPE,
product,
products.stream().forEach(p->p::getPartNo)
);
});
return null;
}
/**
*在ElasticSearch中创建产品
*
*@param product该产品
*@返回响应字符串
*@throws-JsonProcessingException在无法分析响应时抛出JsonProcessingException
*/
公共字符串createNewProduct(Product Product)引发JsonProcessingException{
最终ObjectMapper ObjectMapper=新ObjectMapper();
最终字符串json=objectMapper.writeValueAsString(产品);
if(json!=null){
AwsResponse response=createDocument(ElasticSearchConstants.PRODUCTS\u索引,
ElasticSearchConstants.PRODUCTS\u DOCUMENT\u TYPE,
json,
product.getPartNo());
//创建以前未看到的新文档将导致201状态,而覆盖以前的文档将导致200状态
if(response!=null&&(response.getHttpResponse().getStatusCode()==HttpStatus.CREATED.value())
||response.getHttpResponse().getStatusCode()==HttpStatus.OK.value()){
LOGGER.info(“成功创建了新产品”,Product.getPartNo(),Product.getLevelOne());
return product.getPartNo();
}
}
返回null;
}
/**
*在ElasticSearch中创建新产品
*@param products该产品
*@throws-JsonProcessingException在无法分析响应时抛出JsonProcessingException
*/
公共字符串createNewProducts(ArrayList products)引发JsonProcessingException{
最终ObjectMapper ObjectMapper=新ObjectMapper();
products.stream()
.map(产品->{
试一试{
返回objectMapper.writeValueAsString(产品);
}捕获(JsonProcessingException e){
返回新的JsonProcessingException(e){};
}
})
.forEach(产品->{
createDocument(ElasticSearchConstants.PRODUCTS_索引,
ElasticSearchConstants.PRODUCTS\u DOCUMENT\u TYPE,
产品,,
products.stream().forEach(p->p::getPartNo)
);
});
返回null;
}
如您所见,createDocument方法接受4个参数,其中4个是字符串
第一种方法非常有效,但第二种方法有一个问题。
当我尝试获取partNo时,它会给我一个错误,因为正常情况下“void不是功能接口”,我如何才能使它工作。您不需要
映射
操作,forEach
可以在您的情况下工作。在这种情况下,stream
s的使用也不是很有效。您可以简单地为循环编写一个,并按如下方式执行操作:
for (Product product : products) {
String json = objectMapper.writeValueAsString(product);
// handle the exception as well above
createDocument(ElasticSearchConstants.PRODUCTS_INDEX,
ElasticSearchConstants.PRODUCTS_DOCUMENT_TYPE,
json, product.getPartNo());
}
您不需要map
操作,在您的情况下,forEach
可以工作。在这种情况下,stream
s的使用也不是很有效。您可以简单地为
循环编写一个,并按如下方式执行操作:
for (Product product : products) {
String json = objectMapper.writeValueAsString(product);
// handle the exception as well above
createDocument(ElasticSearchConstants.PRODUCTS_INDEX,
ElasticSearchConstants.PRODUCTS_DOCUMENT_TYPE,
json, product.getPartNo());
}
Product::getPartNo
或p->p.getPartNo()
。。或者更确切地说,您案例中的问题应该是使用中的方法的签名createDocument
,不应该仅用单个产品调用该方法吗product::getPartNo
或p->p.getPartNo()
。。或者更确切地说,您的问题应该是使用中的方法的签名createDocument
,不应该只使用一个产品调用它吗?啊,我知道了,但我是streams的新手,所以我正在尝试提高我的技能,谢谢,啊,我知道了,但我是streams的新手,所以我正在努力提高我的技能,谢谢