Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Java - FastUtil - stream

Dobrý den,

S poli pracuji výhradně pomocí streamu.

Avšak původní třídu ObjectArrayList (ArrayList pomocí knihovny FastUtil), která stream umožňovala, jsem musel přepsat na Int2ObjectArrayMap, což je vlastně variace asociovaného pole int -> object, která však stream neumožňuje.

S touhle knihovnou moc dlouho nedělám a asociované pole jsem objevil teprve nedávno, takže moc tomu nerozumím.

Proto se chci, prosím Vás, zeptat, jestli je možné něco udělat proto, abych stream mohl použít nebo to obejít jinou variantu, abych nemusel používat cyklus for each?

Děkuji.

Předmět Autor Datum
A pres co chces iterovat? Mas tam metody keySet() a values() ktere vraci instance, ktere uz stream()…
MaSo 14.02.2018 08:27
MaSo
Aha. values() potřebuji. Je to celkem logické, to mě mohlo napadnout. Díky. Ještě bych se chtěl, pr…
MichalDM 15.02.2018 16:55
MichalDM
Ano, ale treba iteraci pres EntrySet. Vzhledem k tvym use-cases to docela zavani spatne zvolenou dat…
MaSo 15.02.2018 17:17
MaSo
Zavání špatně zvolenou strukturou? No, jak jsem už na začátku napsal, původně jsem měl ObjectArrayL…
MichalDM 15.02.2018 22:08
MichalDM
Int2ObjectArrayMap je hlavne mapa, takze se pres ni nema iterovat, ale prvky se maji vytahovat podle…
MaSo 16.02.2018 12:30
MaSo
Tak jsem to vyřešil jinak. Pole jsem vrátil zpátky na ObjectArrayList a prvkům jsem přidal číslo po…
MichalDM 17.02.2018 23:20
MichalDM
A o jakych poctech prvku se bavime?
MaSo 17.02.2018 23:25
MaSo
250. Já vím, není to moc, ale u té dříve zmíněné odpovědi je právě napsané, že je to rychlejší už př…
MichalDM 18.02.2018 17:29
MichalDM
Smaria pano. Kvuli 250 prvkum jsi tam narval osmnactimegove jarko nejake obskurni knihovny??? Proc n…
MaSo 18.02.2018 19:01
MaSo
Upřímně jsem takovou odpověď čekal. Ale chápu to, až na tu druhou větu. Neřekl jsem ani slovo o tom,…
MichalDM 18.02.2018 20:26
MichalDM
Beztak to nepotrebujes...:-P poslední
MaSo 18.02.2018 20:34
MaSo

Zavání špatně zvolenou strukturou?

No, jak jsem už na začátku napsal, původně jsem měl ObjectArrayList. Prvky v tomto poli měli mezi sebou určité vazby(odkazy), které byly natvrdo napsané do jejich fieldu(pole).

Takový zápis je ale nevhodný na zprávu a testování, proto jsem to přepsal na metodu, která to vyřeší. K tomu využívala index prvku v poli. Např. 2 měla odkaz na 4 a 6 (čistě jako příklad).

Jelikož ale v programu musím procházet celé pole, tak jsem chtěl zbytečné prvky odstranit. Abych využil ten příklad výše, když nastavím 2, tak je 4 a 6 zbytečná a chci je odstranit.

Problém však nastává, kdybych třeba pomocí jiné vazby jiného prvku odstranil 5 a všechno s indexem 6 a výše by se muselo o 1 snížit.

Kdybych potom pomocí 2 odstranil 4 a 6 prvek, tak ve skutečnosti odstraním 4 a původní 7 prvek, což je špatně.

Proto jsem to přepsal na Int2ObjectArrayMap, kde tento problém nenastává.

Jenže hned potom mi začalo IDE řvát, že nezná stream() a teď se dostáváme na začátek mého dotazu.

Takže jestli jsem to snad dobře vysvětlil a Vy jste pochopil o co mi jde, jakou datovou strukturu by jste mně, prosím Vás, doporučil?

Int2ObjectArrayMap je hlavne mapa, takze se pres ni nema iterovat, ale prvky se maji vytahovat podle klice...

Z tveho popisu mi neni moc jasny tvuj objektovy model. To mas jako prvek, ktery ma vazbu na jine prvky? Proc teda nevymodelujes strom? Prvek bude mit odkaz na kolekci zavislych prvku.

Tak jsem to vyřešil jinak.

Pole jsem vrátil zpátky na ObjectArrayList a prvkům jsem přidal číslo podle pořadí při vytváření jako konstantní field.

A pak ty prvky vybírám právě podle tohoto fieldu, takže při mazání prvků k žádné záměně nedojde.

Na druhou stranu musím projet celé pole, abych našel potřebné prvky, ale při jeho velikosti, která se bude ještě postupně zmenšovat, to žádný problém není.

Jen jsem se chtěl ještě zeptat, zda je lepší procházet ArrayList nebo HashSet? Vyhnout se duplicitám ani získávat pole pomocí indexu nepotřebuji, takže můžu použít obojí.

I tak mě zajímalo, co je rychlejší procházet.

hash-set-and-array-list-performances

V první odpovědi je napsané, že HashSet je rychlejší. I tak by se chtěl zeptat, co si o tom myslíte Vy?

Díky.

Zpět do poradny Odpovědět na původní otázku Nahoru