@startuml package com.iluwatar.fluentinterface.fluentiterable.simple { class SimpleFluentIterable { - iterable : Iterable # SimpleFluentIterable(iterable : Iterable) + asList() : List + filter(predicate : Predicate) : FluentIterable + first() : Optional + first(count : int) : FluentIterable + forEach(action : Consumer) + from(iterable : Iterable) : FluentIterable {static} + fromCopyOf(iterable : Iterable) : FluentIterable {static} + getRemainingElementsCount() : int + iterator() : Iterator + last() : Optional + last(count : int) : FluentIterable + map(function : Function) : FluentIterable + spliterator() : Spliterator + toList(iterator : Iterator) : List {static} } } package com.iluwatar.fluentinterface.app { class App { - LOGGER : Logger {static} + App() + main(args : String[]) {static} - negatives() : Predicate {static} - positives() : Predicate {static} - prettyPrint(delimiter : String, prefix : String, iterable : Iterable) {static} - prettyPrint(prefix : String, iterable : Iterable) {static} - transformToString() : Function {static} } } package com.iluwatar.fluentinterface.fluentiterable.lazy { abstract class DecoratingIterator { # fromIterator : Iterator - next : E + DecoratingIterator(fromIterator : Iterator) + computeNext() : E {abstract} + hasNext() : boolean + next() : E } class LazyFluentIterable { - iterable : Iterable # LazyFluentIterable() # LazyFluentIterable(iterable : Iterable) + asList() : List + filter(predicate : Predicate) : FluentIterable + first() : Optional + first(count : int) : FluentIterable + from(iterable : Iterable) : FluentIterable {static} + iterator() : Iterator + last() : Optional + last(count : int) : FluentIterable + map(function : Function) : FluentIterable } } package com.iluwatar.fluentinterface.fluentiterable { interface FluentIterable { + asList() : List {abstract} + copyToList(iterable : Iterable) : List {static} + filter(Predicate) : FluentIterable {abstract} + first() : Optional {abstract} + first(int) : FluentIterable {abstract} + last() : Optional {abstract} + last(int) : FluentIterable {abstract} + map(Function) : FluentIterable {abstract} } } LazyFluentIterable ..|> FluentIterable SimpleFluentIterable ..|> FluentIterable @enduml