小编Cos*_*aic的帖子

java stream sort with string comparator ignore case

hotels.stream().sorted(Comparator.comparing(Hotel::getCity)
                       .thenComparing(hotel -> hotel.getName().toUpperCase())))
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

请问是否有更简洁的写法.thenComparing(hotel -> hotel.getName().toUpperCase()),我找到了String.CASE_INSENSITIVE_ORDER但是如何使用这个比较器hotel.getName().

更新: 应用@Arnaud Denoyelle的建议.

hotels.stream().sorted(Comparator.comparing(Hotel::getCity)
                       .thenComparing(Hotel::getName, String.CASE_INSENSITIVE_ORDER))
                .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

它看起来更好.

java

11
推荐指数
1
解决办法
1741
查看次数

Spring data JPA 如何创建通用规范构建器

我有不同的规格类别:

public class UserSpecification implements Specification<ApplicationUser> {
    private SearchCriteria criteria;

    public UserSpecification(SearchCriteria criteria) {
        this.criteria = criteria;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Predicate toPredicate(Root<ApplicationUser> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
       ...
    }
}

public class HotelSpecification implements Specification<Hotel> {

    private SearchCriteria criteria;

    public HotelSpecification(SearchCriteria criteria) {
        this.criteria = criteria;
    }

    @SuppressWarnings("unchecked")
    @Override
    public Predicate toPredicate(Root<Hotel> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
      ...
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,我尝试使用通用构建器来编写相同类型的规范,因为构建器类 99% 是重复的,仅在类类型上有所不同。

public class MySpecificationBuilder {
    private final List<SearchCriteria> params;

    public MySpecificationBuilder () {
        params = …
Run Code Online (Sandbox Code Playgroud)

java generics spring-data-jpa

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

Java使用流收集器分组创建单个值的Map

我知道groupingBy回报Map<K,List<V>>。但是,如果我知道每个键都有一个唯一的值,那么我如何获得一个值V不是的Map List<V>呢?

例如:

Map<String, Transaction> transactions =
transactions.stream().collect(groupingBy(Transaction::getID));
Run Code Online (Sandbox Code Playgroud)

ID是唯一的。

java java-stream

4
推荐指数
1
解决办法
293
查看次数

默认情况下,LocalDateTime不是ISO8601

LocalDateTime用来代表时间.在调试模式下,我注意到时间格式不在ISO 8601中,这使我很难直接发送到其他api.

请求类:

public class AgreementRequest {
    @NonNull
    private String name;
    @NonNull
    private String description;
    @JsonProperty("start_date")
    @DateTimeFormat(iso = DATE_TIME)
    @NonNull
    private String startDate;
}
Run Code Online (Sandbox Code Playgroud)

初始化:

request = AgreementRequest.builder()
                .name("Premium subscription")
                .description("Montly subscription")
                .startDate(LocalDateTime.now().plusDays(1).toString()).build();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

LocalDateTime.toString无论是在ISO 8601,信是不是z在ISO8601不见了.

我有objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);残疾,这是问题吗?

java jackson

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

标签 统计

java ×4

generics ×1

jackson ×1

java-stream ×1

spring-data-jpa ×1