[
https://issues.apache.org/jira/browse/COLLECTIONS-442?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Neidhart updated COLLECTIONS-442:
----------------------------------------
Attachment: FluentIterator.java
I have reworked the patch a bit, see the attached file. My rationale was as
follows:
* reuse existing code as much as possible
* use real classes instead of interfaces to avoid problems with breaking
compatibility when extending later on
An example how to use the interface:
{noformat}
public class MyTest {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(3);
FluentIterator<String> it =
FluentIterator.<Integer>empty()
.andThen(list.iterator())
.dropIf(new Predicate<Integer>() {
public boolean evaluate(Integer object) {
return object.intValue() < 2;
}
})
.unique()
.andThen(list.iterator())
.mapWith(new Transformer<Integer, String>() {
public String transform(Integer input) {
return "[" + String.valueOf(input.intValue())
+ "]";
}
});
System.out.println(it.toList());
}
}
{noformat}
This prints
{noformat}
[[2], [3], [1], [2], [3], [2], [3]]
{noformat}
In the original patch, "andThen" behaved differently to the other composition
methods in the sense, that only andThen returned the same object. All the other
methods returned a new object.
This could be error-prone when people do things like this:
{noformat}
it.andThen(...)
it.filterKeep(...)
{noformat}
in fact, the "andThen" will update "it", while "filterKeep" will return a new
object and leave "it" untouched. This is fine as long as you do method chaining
but can lead to unexpected errors or behavior in other cases.
So I decided to be consistent and always return the same object. The only
exception is the "mapWith" method, which will always return a new object as the
generic return type may change.
I am not completely happy with the class name, so if somebody has a better idea?
Any comments are welcome, if the API is accepted we can still include it for
the upcoming 4.0-alpha1 which I plan to release in 1-2 weeks.
> A set of enhanced iterator classes donated by the Apache Jena project
> ---------------------------------------------------------------------
>
> Key: COLLECTIONS-442
> URL: https://issues.apache.org/jira/browse/COLLECTIONS-442
> Project: Commons Collections
> Issue Type: Improvement
> Components: Iterator
> Reporter: Claude Warren
> Fix For: 4.0
>
> Attachments: COLLECTIONS-442.tar.gz, FluentIterator.java
>
>
> A set of templated (Generic) iterators that add filtering, mapping, and
> conversion to set or list collections. Tests included.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira