小编Ale*_*lex的帖子

Java 8偷看vs地图

我有以下案例:有一个对象列表 - 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不符合这些需求,但希望得到关于如何以更正确的方式完成此任务的建议.

java java-8

24
推荐指数
1
解决办法
2万
查看次数

Java流意外结果

我有以下代码:

Stream.of("Java", "Stream", "Test")
      .peek(s -> System.out.print(s + " "))
      .allMatch(s -> s.startsWith("J"));
Run Code Online (Sandbox Code Playgroud)

为什么它会打印出Java Stream?

java java-8 java-stream

8
推荐指数
1
解决办法
177
查看次数

有没有办法让比较器不做任何事情?

我有两个类扩展一个父类,并且有一个方法可以通过某个参数对数据进行排序.因此,对于这两个类中的一个,我需要应用一些排序,但是对于另外两个不做任何事情.有可能吗?

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)

java comparator java-8

5
推荐指数
1
解决办法
898
查看次数

Spring Data JPA 在两个查询中加载一对一关系

我有以下课程:

@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)

java spring hibernate spring-data-jpa

5
推荐指数
1
解决办法
5361
查看次数

如何在响应主体中为Cloud Api Gateway添加一些数据

我在云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)

我做错了什么?

java spring spring-cloud

5
推荐指数
1
解决办法
2628
查看次数