我有以下案例:有一个对象列表 - ProductData包含几个字段:
public class ProductData
{
....
private String name;
private String xref;
//getters
//setters
}
Run Code Online (Sandbox Code Playgroud)
并且有API返回以下对象的列表:
public class RatingTableRow
{
private String planName;
private String planXref;
private int fromAge;
private int toAge;
private int ratingRegion;
//constructor
//getters
//setters
}
Run Code Online (Sandbox Code Playgroud)
但它返回具有空计划名称字段的对象,因为在提取此对象期间不允许这样做.我需要通过外部参照将产品数据与RatingTableRow链接,以便将计划名称设置为RatingTableRow,因为我需要稍后使用此对象,因此我创建了以下代码来执行此操作:
Map<String, ProductData> productByXref = plans.stream()
.collect(toMap(ProductData::getInternalCode, Function.identity()));
return getRatingTableRows(...).stream
.filter(ratingRow -> productByXref.containsKey(ratingRow.getPlanXref()))
.peek(row -> {
ProductData product = productByXref.get(row.getPlanXref());
row.setPlanName(product.getName());
})....;
Run Code Online (Sandbox Code Playgroud)
我知道java文档说这peek
不符合这些需求,但希望得到关于如何以更正确的方式完成此任务的建议.
我有以下代码:
Stream.of("Java", "Stream", "Test")
.peek(s -> System.out.print(s + " "))
.allMatch(s -> s.startsWith("J"));
Run Code Online (Sandbox Code Playgroud)
为什么它会打印出Java Stream?
我有两个类扩展一个父类,并且有一个方法可以通过某个参数对数据进行排序.因此,对于这两个类中的一个,我需要应用一些排序,但是对于另外两个不做任何事情.有可能吗?
public class MedicalCompositeRatesData{
@Override
public List<RateTableData> buildData(RateTableInputBean inputBean)
{
SGQuotingData sgQuotingData = inputBean.getQuotingData();
List<ProductData> products = extractorFactory
.getProductExtractor(inputBean.getPlanType(), inputBean.getRatingType())
.extract(sgQuotingData);
List<Row> rates = products.stream()
.map(it -> buildRow(it, sgQuotingData))
.sorted(getProductComparator())
.filter(Objects::nonNull)
.collect(Collectors.toList());
return buildRateTables(rates);
}
protected Comparator<Product> getProductComparator(){
//should leave default sorting
}
}
public class AlternateCompositeRatesBuilder extends MedicalCompositeRatesData
{
protected Comparator<Product> getProductComparator(){
//will sort by rate
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下课程:
@Data
@Entity
@Table(name = "user_info")
public class UserIdentity implements UserDetails {
@Id
private Long id;
private String username;
private String password;
private String facebookId;
private String phoneNumber;
private Timestamp unblockDate;
@OneToOne(fetch = FetchType.EAGER, optional = false)
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "role_id")
private Role role;
}
@Data
@Entity
@Table(name = "role")
public class Role {
@Id
private Long id;
private String name;
@ManyToMany
@Fetch(FetchMode.JOIN)
@JoinTable(name = "role_permission", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "permission_id", referencedColumnName …
Run Code Online (Sandbox Code Playgroud) 我在云API网关中添加了一些身份验证逻辑。我添加了GatewayFilter:
import java.util.List;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.http.HttpStatus;
import org.springframework.util.CollectionUtils;
import org.springframework.util.PatternMatchUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
public class AuthorizationFilter implements GatewayFilter {
@Override
public Mono<Void> filter(
ServerWebExchange exchange, GatewayFilterChain chain) {
List<String> authorization = exchange.getRequest().getHeaders().get("Authorization");
if (CollectionUtils.isEmpty(authorization) &&
!PatternMatchUtils.simpleMatch(URL_WITHOUT_AUTH, exchange.getRequest().getURI().toString())) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
//Add some custom data in body of the response
return exchange.getResponse().setComplete();
}
String token = authorization.get(0).split(" ")[1];
// token validation
return chain.filter(exchange);
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法在响应正文中添加一些数据。您能帮我了解它的工作原理以及如何对其进行自定义吗?
PS我试图添加一些数据以响应使用通量,但它不起作用:
DataBuffer b = exchange.getResponse().bufferFactory().allocateBuffer(256);
b.write("12345".getBytes());
return exchange.getResponse().writeWith(s -> Flux.just(b));
Run Code Online (Sandbox Code Playgroud)
我做错了什么?