我需要从列表中删除特定 ID。
为了更好地解释自己,我有一个
Document
列表,其中包含复合 String
,它们是标识符。这些标识符由一对用“-”分隔的 Integers
组成。
这个想法是从标识符列表中删除所有包含
String
相同第一部分的标识符,并仅保留其中最大的一个。也就是说,如果我有一个 Document
列表,输出如下:
"documentId": "521-1"
"documentId": "521-2"
"documentId": "32-2"
"documentId": "112-6"
"documentId": "112-11"
"documentId": "112-2"
结果应该是:
"documentId": "521-2"
"documentId": "112-11"
"documentId": "32-2"
我尝试过用流来做到这一点,但我没有找到方法。我浏览了列表,但由于它们是复合标识符,我不知道如何进行比较,也不知道如何保留其中最小的一个。
我的伪代码,不起作用:
object.getDocuments().stream().reduce((a, b)->{
if(a.getFirstPart().equals(b.getFirstPart())){
//Then I should remove the small secondPart
} return b;});
这是一种方法。请注意,它对无效数据并不稳健。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Test {
public static void main(String[] args) {
String[] ids = {"521-1",
"521-2",
"32-2",
"112-6",
"112-11",
"112-2"
};
List<String> result = Arrays.stream(ids).collect(Collectors.toMap(
s -> s.split("-")[0], s -> Integer.parseInt(s.split("-")[1]), Math::max
)).entrySet().stream().map(e -> e.getKey() + "-" + e.getValue()).collect(Collectors.toList());
System.out.println(result);
}
}