いくつかの条件に基づいて、MongoDBからデータを読み取り、List<Document>
結果セット付き。
List<Document> documentList = new ArrayList<Document>();
サンプルレコードは次のようになります。
documentList: [
Document{
{ _id=5975ff00a213745b5e1a8ed9,
u_id=,
visblty = 1,
c_id=5975ff00a213745b5e1a8ed8,
batchid=null,
pdate=Tue Jul 11 17:52:25 IST 2017,
locale=en_US,
subject = "Document2"
} },
Document{
{ _id=597608aba213742554f537a6,
u_id=,
visblty = 1,
c_id=597608aba213742554f537a3,
batchid=null,
pdate=Fri Jul 28 01:26:22 IST 2017,
locale=en_US,
subject = "Document2"
} }
]
このdocumentListを使用して、再びいくつかの条件を使用してフィルター処理を行っています。次に、いくつかの条件に基づいてフィルターレコードを並べ替える必要があります(要求に応じます)。
List<Document> outList = documentList.stream()
.filter(d -> d.getInteger("visblty") == 1
&& (!StringUtils.isEmpty(req.pdate())? (d.getDate(CommonConstants.PDATE).after(afterDate)): true)
&& (!StringUtils.isEmpty(req.pdate())? (d.getDate(CommonConstants.PDATE).before(beforeDate)): true)
.sorted().skip(4).limit()
.collect(Collectors.toList());
ソート方法がわからない(動的に入力に基づいてソート順を変更する必要があるため、「pdate by DESC
"または" subject by ASC"
)
お気に入り: "order by pdate DESC" or "order by pdate ASC"" or "order by subject DESC"
DocumentクラスのComparatorオブジェクトを使用してソートする方法。
注:人々から提案されたいくつかの方法を試しましたが、まだ運がありませんでした。前もって感謝します!
グループコンパレータとパラレルストリームを次のように使用できます。
List<Document> outList = documentList.stream()
.filter(....)
.sorted(Comparator.comparing(Document::getPdate)
.thenComparing(Document::getSubject))
.parallel();
.sorted()
の代わりに.sorted(Comparator comparator)
メソッドを使用してみてください。
.sorted(comparator)
を使用して、Comparator.comparing()
で使用されるComparator
を作成できます。
_Comparator.comparing(Function keyExtractor)
.reversed()
.thenComparing(Function keyExtractor)
_
例えば:
_List<Document> outList = documentList.stream()
// do your filtering here
.sorted(Comparator.comparing(Document::getPdate).reversed()
.thenComparing(Document::getSubject))
.skip(4)
.limit()
.collect(Collectors.toList());
_
この例では、d -> d.getPdate()
やd -> d.getSubject()
などのラムダ式の代わりに、メソッド参照_Document::getPdate
_および_Document::getSubject
_を使用できます。