Tek yapmanız gereken, sonuçta bir kez yineleme yapmak ya da yeniden kullanılabilir canlı filtrelenmiş bir görünüme gereksinim duymanız gerekmedikçe, eşleşmeleri içeren görünmeyen bir liste oluşturmak isteyebilirsiniz. Sonucu saklamak ve daha sonra veri listesi boyunca yinelemek ve eşleşmeleri eklemek için List
veya Set
oluşturmak, mükemmel bir yaklaşımdır ve anlaşılması kolaydır!
List<Data> result = Lists.newArrayList();
for (Data data : data1) {
if (dataIds.contains(data.getId()))
result.add(data);
}
Ben senin
Data
sınıf bir
Identifiable
arabirimini uygulayan görüyoruz. Bunu göz önünde bulundurarak, 0 ...
Identifiables.getIdFunction()
ya da bir şey alan bir
Function<Identifiable, Integer>
oluşturabilirsiniz. Bu hoş bir şeydir çünkü başka yerlerde de yararlı olabilir (
here numaralı blogda bu yaklaşım hakkında konuşuyorum). Bunun üzerine yerinde, Guava ile bunu yanı oldukça basit olacaktır:
Predicate<Identifiable> predicate = Predicates.compose(
Predicates.in(dataIds), Identifiables.getIdFunction());
List<Data> filtered = Lists.newArrayList(Iterables.filter(data1, predicate));
Bu temelde ilk örneğe işlevsel olarak eşdeğer, ancak anlamak zor olacak gibi görünüyor. Bunu yapmak için net bir fayda olmadığından (sadece canlı görüntüyü kullanmak istediğiniz bir durumdan farklı olarak), tavsiyem sadece birincisi ile gitmek olacaktır. LambdaJ ile
dataID en karşılık nesnelerin kimlikleri Listeye, neden kimse bir tamsayı diğer bir uzun olduğu zaman nedir? Ayrıca, hangi koleksiyon türü kullanılır? Örneğin. : Data1 bir ArrayList veya bir LinkedList mi? – dominicbri7
bir hataydı .. düzeltildi – Premraj