Java bir sıralama ile çalışmak için 8 yol
En iyi yolu Java 8'de ne bir numaralama tüm değerleri ile çalışmak için merak ediyorum. Tüm değerleri almak ve örneğin bir yere eklemek için, aşağıdaki numaralama var diyelim ki gerektiğinde özellikle:
public enum Letter {
A, B, C, D;
}
Elbette aşağıdakileri yapabilirim:
for (Letter l : Letter.values()) {
foo(l);
}
Ama, ayrıca numaralama tanımı için aşağıdaki yöntemi ekleyin:
public static Stream<Letter> stream() {
return Arrays.stream(Letter.values());
}
Ve sonra için yukarıda: değiştirin
Letter.stream().forEach(l -> foo(l));
Bu yaklaşım, OK veya tasarım ya da performans biraz suçum var mı? Ayrıca, neden çeteleler akışı yok() yöntemi?
CEVAP
-Üçüncü bölümde cevap: üç sorum var:
Görünüm tasarım bir noktadan tamam mı?
Kesinlikle. Bunda yanlış bir şey yok. Eğer numaralama üzerinden yineleme bir sürü yapmak gerekiyorsa, akış API gitmek temiz ve küçük bir yöntem arkasında kazan plaka gizleme iyidir. OldCumudgeon’version s bile daha iyi. düşünün istiyorum rağmen
Performans bakımından itibaren tamam mı?
Büyük olasılıkla bir önemi yok. ÇoÄŸu zaman, çeteleler o kadar büyük deÄŸil. Bu nedenle, bir yöntem için orada ne olursa olsun veya diÄŸer muhtemelen vakaların ™.9 önemli deÄŸil.
Tabii ki, nereden 0.1% vardır. Bu durumda: ölçü doğru, gerçek-dünya veri ve tüketiciler.
Eğer vardı için bahis ediyorum bekliyoruz for each
döngü için daha hızlı, bu haritalar daha doğrudan bellek modeli, ama yok o zaman konuşmaya performans ve yok melodi önce orada gerçek bir ihtiyaç için ayarlama. İkinci okuma ve sadece kod tarzı performansı hakkında endişe sonra ilk doğru, kolay bir şekilde kod yazın.
Neden Çeteleler düzgün Akış API entegre değil mi?
Eğer Java Stream diğer birçok dilde eşdeğer API karşılaştırırsanız, gerçekten sınırlı görünüyor. Eksik olan çeşitli parçaları (Akarsu, örneğin olarak yeniden Dere ve Optionals) vardır. Diğer yandan, Akış API uygulama kesinlikle API için büyük bir değişim oldu. Bir nedenden dolayı ertelendi birden çok kez oldu. Oracle en önemli kullanım durumları değişiklikleri sınırlamak için istedim. Çeteleler zaten pek kullanılmaz. Tabii, her projenin bir çift var, ama Listeleri ve diğer Koleksiyon sayısı kıyaslanamaz bile. Bir Numaralama olduğu zaman bile, birçok durumda hiç üzerine yineleme olmayacak. Listeler ve Ayarlar, diğer taraftan, muhtemelen hemen hemen her zaman içinde tekrarlanır. Ben bu Çeteleler Akım, dünyanın kendi adaptörü alamadım neden olduğunu varsayalım. Bu daha gelecek sürümlerde eklenen alır mı göreceğiz. Ve o zamana kadar hep Arrays.stream
kullanabilirsiniz.
Java nasıl bir Liste için bir dizi sır...
Java HTTP yanıt kodları için tam bir s...
Neden Diziler farklı türleri için iki ...
Neden char[] şifreler için Dize Java t...
Java kullanarak.net.Ateş ve işlemek iç...