Java Akımları için yeni biriyim ve kafama bu özel probleme yaklaşmanın "en iyi yolu" ile karşı çıkıyorum. Yaklaşık 30.000 girişten (potansiyel olarak çok daha fazla) uzun bir [] sahibim ve 100'lük parçalara ayırmam gerekiyor ve ardından alt diziyle bir API çağrısı yapmalı ve tüm 100 boyutlu parçalar oluşana kadar bunu yapmaya devam etmeliyim. işlendi. Ayrıca, başlangıç listesindeki tüm girişler seçilmemelidir. Bu yüzden, orijinal diziyi işlemek, bazı kriterler bazında belirli elemanlar bazını seçerek ve sonra 100'lük parçalarda "geçerli" elemanlar toplamaya ihtiyacım var. Açıkçası, bunu bir döngüde yapabilirim ve sadece bir imleci System.arrayCopy kullanabilirim (), ya da böyle bir şey. Ama verimsiz görünüyor ve Java Stream API'sini kullanmak için çok cazipim. Bir kaç farklı yaklaşım hakkında düşünüyordum, ama ölü uçlara koşmaya devam ediyorum. Ben uzun [] öğeleri seçimimi yapmak için argüman olarak bir yöntem referans ile filter() kullanıyorum, ama geri kalanı üzerinde sıkışmış. Herhangi bir ipucu çok takdir edilir. Teşekkürler.Binlerce öğeden oluşan uzun bir [] öğeyi 100 öğe yığınına nasıl dönüştürürüm?
cevap
Diziyi parçalar halinde bölmek için, dizin kullanmanız gerekir. Akımlar genellikle endeksleri içeren problemler için uygun değildir, ancak aşağıdaki gibi bir parça akışı elde edebilirsiniz (burada CHUNK_SIZE
100
ve arr
long[]
'dur). Geçen yığın genellikle CHUNK_SIZE
daha uzunluğu daha az olacağı
IntStream.range(0, 1 + Math.floorDiv(arr.length - 1, CHUNK_SIZE))
.mapToObj(i -> Arrays.copyOfRange(arr, i * CHUNK_SIZE, Math.min(arr.length, (i + 1) * CHUNK_SIZE)));
...
Not. Eğer filtreleme sonra parçalara bölmek istiyorsanız
, daha sonra yukarıdaki gibi parçalar bölmek sonra long[]
almak için toArray()
kullanın ve, filter()
yapın dizinin akışı almak gerekir. Bunu akıcı bir tek katlı olarak yapmak mümkün olmazdı.
Teşekkürler Paul. Alttaki diziyi 100'lük filtreli parçalar halinde bölmek için Akışları kullanmanın bir yolu olacağını ve sonuçta ortaya çıkan tüm alt dizileri tüketmek için kullanılabilecek (ve muhtemelen paralelleştirilmiş) bir Akım
Duh, sadece son paragrafta belirttiğiniz şeyi okuyun :-) – user2337270
Sadece açıklığa kavuşturmak için - Sipariş devam etmeli mi? Örneğin, akıştaki 1. ve 51. elemanlar (yüklemi karşılayanlar) aynı yığın içinde olmalıdır, değil mi? –
Merhaba Kedar. Hayır, sipariş önemli değil. Sorumlulukta bundan bahsetmeliydim. – user2337270