2016-03-25 19 views
17

Sadece C# Java değil nasıl yapılır.Nasıl bir tür bir liste dönüştürmek için bir Java 8 Lambda ifadesi nasıl kullanılır

List<TypeX> var ama bu listedeki her öğenin aslında TypeX Arayan TypeY alt sınıfı olduğunu biliyorum.

List<TypeX> kabul eden ve List<TypeY> döndüren bir Lambda ifadesi nasıl yazabilirim? Benim Örneğin

+0

Bir şey denediniz mi? – Reimeus

+0

Eğer dürüst olmam gerekirse, hala Java'nın lambda sözdizimini alıyorum. –

+0

Aynı örneği farklı bir şekilde (güvensiz) görmeye mi çalışıyorsunuz yoksa 3 cevapta olduğu gibi yeni bir liste hazırlıyor musunuz (şimdiye kadar)? –

cevap

22

, şu dersleri kullanacağız:

final List<TypeX> xList = ... 

Eğer TypeY.class.cast bir yöntem başvuru kullanmak yapmanız gereken tek şey:

class TypeX {} 
class TypeY extends TypeX {} 

Sonra bir List<TypeX> var

final List<TypeY> yList = xList.stream() 
           .map(TypeY.class::cast) 
           .collect(toList()); 

Ayrıca filter() da

final List<TypeY> yList = xList.stream() 
           .filter(TypeY.class::isInstance) 
           .map(TypeY.class::cast) 
           .collect(toList()); 

Örnekler kullanın:: is Java yansıtma

List<TypeX> list = ...; 
List<TypeY> castList = 
    list.stream().map(x -> (TypeY)x).collect(Collectors.toList()); 
+5

Hataları dışlamak için filtreden dolayı bunu doğru yanıt olarak kabul edeceğim, ancak Collector'lar için Statik içe aktarma veya Collectors.toList() 'e yanıtı değiştirmeyi öneriyorum. –

+0

Bu cevap için teşekkürler! – dahui

4

Sadece tüm map hataya neden olur öğeleri dışlamak map yöntemiyle yapılan yöntem:

List<TypeY> res = listTypeX 
    .stream() 
    .map((x) -> (TypeY)x) 
    .collect(Collectors.toList()); 
5

: elemanlarını atmalarını bir lambda'da

import static java.util.stream.Collectors.toList; 
2

Sen Eclipse Collections den selectInstancesOf() kullanabilirsiniz: List den XLIST değiştiremiyorsanız

MutableList<TypeX> xList = Lists.mutable.empty(); 
MutableList<TypeY> yList = xList.selectInstancesOf(TypeY.class); 

:

List<TypeX> xList = Lists.mutable.empty(); 
List<TypeY> yList = ListAdapter.adapt(xList).selectInstancesOf(TypeY.class); 

Not: Ben Koleksiyonları Eclipse için bir katkıda bulunan duyuyorum.

İlgili konular