我有一個由物件組成的 java 串列。大多數物件都有公共欄位,我只需要從具有特定欄位集的候選串列中保留一個物件。我怎樣才能做到這一點?例子
class A{
String field1;
String field2;
String field3;
LocalDate dateField;
}
具有以下值;
A first = new A("field1","field2","field3",null);
A second = new A("field1","field2","field3",LocalDate.now());
A third= new A("field1","field2","field3",LocalDate.now().plusMonths(3));
A forth= new A("4","5","6",LocalDate.now().plusMonths(3));
A fifth = new A("7","8","9",LocalDate.now().plusMonths(3));
我需要撰寫一個方法來回傳一個由第二個、第四個和第五個組成的串列。因此,如果 field1 field2 和 field3 相同,我需要保留最小 localdate 欄位。如何實作這一目標?
uj5u.com熱心網友回復:
我知道你有一個List<A>型別的物件A。
它似乎想過濾串列,查詢A符合某些要求的專案。過濾該串列時您想搜索什么型別的東西不是很清楚。
List<A> items = ...; // setup the items
List<A> items_filtered = items.stream()
.filter( x -> x.field1.equals("value") )
.collect(Collectors.toList());
List<A> items_filtered_2 = items.stream()
.filter( x -> !x.field2.equals("other_value") )
.collect(Collectors.toList());
這些過濾器可以應用于任何串列,包括作為前一個過濾器結果的串列,或者您可以在同一個過濾器中組合兩個檢查。
List<A> fitlered_both = items.stream()
.filter( x -> x.field1.equals("value") && !x.field2.equals("other_value") )
.collect(Collectors.toList());
uj5u.com熱心網友回復:
你可以試試這個
public static void main(String[] args) {
A first = new A("field1","field2","field3",null);
A second = new A("field1","field2","field3",LocalDate.now());
A third= new A("field1","field2","field3",LocalDate.now().plusMonths(3));
A forth= new A("4","5","6",LocalDate.now().plusMonths(3));
A fifth = new A("7","8","9",LocalDate.now().plusMonths(3));
List<A> collect = Stream.of(first, second, third, forth, fifth)
.collect(
Collectors.groupingBy(a -> Objects.hash(a.field1, a.field2, a.field3),
Collectors.minBy((o1, o2) -> {
if(o1 == null || o2 == null || o1.dateField == null || o2.dateField == null){
return 1;
}
return o1.dateField.compareTo(o2.dateField);
})))
.values().stream().map(Optional::get).collect(Collectors.toList());
System.out.println(collect);
}
你想按類似的物體上,第一,Objects.hash(field1, field2, field3)將組物件基礎上field1,field2和field3。
接下來,您要使用 對分組進行排序Localdate。接下來,我們收集每個組的第一個元素,這就是我們的答案。
uj5u.com熱心網友回復:
我建議撰寫一個比較器并使用它對串列進行排序。然后您將能夠在一次通過中檢索所有所需的物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/329072.html
