Mam java.lang.Iterable
, który leniwie wylicza swoje wartości. Mam do niego dostęp od Scala. Czy istnieje kluczowa metoda API zwracania tylko różnych wartości? Na przykład, obrazowanie istniała metoda filtr, który również wszystkie wyniki zwracane do tej pory:Jak uzyskać różne rzeczy od Scala Iterable, zachowując lenistwo
val myLazyDistinctIterable = iterable.filter((previousReturnedItems, newItem) => previousReturnedItems.contains(newItem))
Chyba nie jest to bardzo ogólny przypadek, ponieważ wiąże się przechowywanie wcześniej wracać rzeczy, i że może być dlaczego nieprawdaż” t w rdzeniu API.
Wiem o List.distinct
i Set
s, ale chcę czegoś, co nie będzie obliczać jego elementów, dopóki nie zostanie zapytany.
Myślę, że najprościej to zrobić, to zwrócić iterator z możliwym do zmiany ustawieniem 'Set' w jego zamknięciu, który śledzi to, co widzi, a następnie jest generowany przez' filter' zastosowany do jego wejścia, aktualizując widziane ustawia i zwraca wartość false, jeśli jest to właściwe. –