java流 stream 用字符串的保单号排序 保单号相同再按照BigDecimal序号排序
时间: 2024-10-16 17:08:28 浏览: 16
java8 stream 操作map根据key或者value排序的实现
在Java中,你可以使用Stream API对列表或其他集合中的保单号进行排序。假设你有一个包含保单号和对应序号的Map,例如`Map<String, BigDecimal> policyMap`,你可以首先将它们转换成一个自定义的Pair对象,然后利用Stream的sorted()方法进行排序。
首先,创建一个Pair类来封装保单号和序号:
```java
import java.util.Map.Entry;
import java.util.stream.Collectors;
class Pair<String, BigDecimal> {
private String policyNumber;
private BigDecimal sequenceNumber;
public Pair(String policyNumber, BigDecimal sequenceNumber) {
this.policyNumber = policyNumber;
this.sequenceNumber = sequenceNumber;
}
// getters and setters...
}
// 如果Map不是直接可用,可以先转成List<Entry<String, BigDecimal>>
List<Entry<String, BigDecimal>> entries = policyMap.entrySet();
```
然后使用Stream对保单号进行排序,并在保单号相同的情况下根据序号排序:
```java
List<Pair<String, BigDecimal>> sortedPairs = entries.stream()
.map(entry -> new Pair<>(entry.getKey(), entry.getValue()))
.sorted(Comparator.comparing(Pair::getPolicyNumber)
.thenComparing(Pair::getSequenceNumber))
.collect(Collectors.toList());
```
这将会返回一个新的已排序的Pair列表,其中保单号按字母顺序排列,如果保单号相同,则序列号较小的排在前面。
阅读全文