2015-03-17 20 views
16

Neden OptionalInt veya diğer ilkel isteğe bağlı tatlar üzerinde map()/ yöntemleri yok gibi görünüyor?Harita/flatMap bir OptionalInt'i ayarlayamıyorum?

stream() harita işlemleri, nesneler ve ilkel maddeler arasındaki dönüştürmeyi mümkün kılar. Ama neden isteğe bağlı değil?

OptionalInt profileId = OptionalInt.of(124); 

Optional<Profile> profile = profileId.map(i -> getProfile(i)); //no such valid map() method! 
+0

Sebep ne olursa olsun, bu operasyonları Opsiyonel ilkel lezzetlere dahil etmemeye karar verdiler. –

+0

Ancak bir OptionalInt üzerinden Opsiyonel'e dönüştüren bir yöntemin uygulanması ne olurdu? Akış hayal ettiğim benzer bir şey yapar. – tmn

+0

Belki de hafif tutmak için dışarıda bırakılmıştı çünkü ilkellerin noktası bu mu? Diğer ilkel isteğe bağlı tatları ve standart nesneyi İsteğe Bağlı olarak barındırmak için harita ve düz harita yöntemlerinin çeşitli varyantları olmalıdır. – tmn

cevap

5

İlkel opsiyoneller değil harita,flatMap ve filtreyi tasarımı ile yöntemleri var.

Ayrıca, Java8 in Action p.305'a göre bunları kullanmamalısınız. Akışlarda ilkel kullanımın gerekçesi performans nedenidir. Çok sayıda elemanın olması durumunda, boks/kutudan çıkarma yükü önemlidir. Ancak bu, isteğe bağlı olarak sadece bir öğe olduğu için anlamsızdır. yöntem referans olarak

public class Foo { 
    public Optional<Integer> someMethod() { 
     return Optional.of(42); 
    } 
} 

Ve kullanım:

Ayrıca, örnek düşünün siz OptionalInt için birYöntem dönüş türünü değiştirirseniz

.stream() 
.map(Foo::someMethod) 

:

public OptionalInt someMethod() { 
    return OptionalInt.of(42); 
} 

Yapamazsın yöntem referansı olarak kullanın ve kod birlikte olmaz üzerinde mpile: Bu Java 9'da görünüyor

.map(Foo::someMethod) 
+9

Örneğinizin noktasını göremiyorum. 'someMethod'' 'OptionalInt' i döndürerek, onu eşleştirebilirsiniz, bir" Stream "yi bir" Stream "(ilk durumda" Stream > ') yerine dönüştürecektir. Ve performans argümanı da geçerli değil. "Stream" ve "Optional" üzerindeki işlemler de kompozisyonla ilgilidir. Ben stream.reduce (binOp) yapabilirim.“Stream” üzerinde harita (eğlenceli), ancak bunu bir “IntStream” üzerinde yapamıyorum. Tutarlılık eksikliği can sıkıcıdır. En azından "IntStream" üzerinde olduğu gibi bir Opsiyonel kutulu() olabilirdi ... – Xavier

2

OptionalInt içinde 0 veya 1 öğelerden birine içeren bir IntStream veren bir stream yöntemine sahip olacaktır. Bu akışta sitesinde tabii map(), flatMap() veya filter(), ben user2138356’s answer eklemek için bir şey yok Java 8 vb

kullanabilirsiniz.

İlgili konular