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)
它看起来更好.
我有不同的规格类别:
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) 我知道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是唯一的。
我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);残疾,这是问题吗?