You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@opennlp.apache.org by "Steven Bethard (JIRA)" <ji...@apache.org> on 2011/01/31 12:01:20 UTC

[jira] Updated: (OPENNLP-99) EventStream should extend Iterator

     [ https://issues.apache.org/jira/browse/OPENNLP-99?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steven Bethard updated OPENNLP-99:
----------------------------------

    Attachment: ObjectStreamVsIterator.diff

Ok, here's a documentation patch summarizing the two main objections to Iterator.

> EventStream should extend Iterator<Event>
> -----------------------------------------
>
>                 Key: OPENNLP-99
>                 URL: https://issues.apache.org/jira/browse/OPENNLP-99
>             Project: OpenNLP
>          Issue Type: New Feature
>          Components: Maxent
>    Affects Versions: maxent-3.0.0-sourceforge
>            Reporter: Steven Bethard
>         Attachments: ObjectStreamVsIterator.diff
>
>
> [As requested, brought over from Sourceforge.]
> Conceptually, EventStream is just an Iterator<Event>. You would get better interoperability with other Java libraries if EventStream were declared as such. If you didn't care about backwards compatibility, I'd say just get rid of EventStream entirely and use Iterator<Event> everywhere instead.
> If you care about backwards compatibility, you could at least declare AbstractEventStream as implementing Iterator<Event> - it declares all of hasNext(), next() and remove(). I believe that shouldn't break anything, and should make all the current EventStream implementations into Iterator<Event>s.
> Why do I want this? Because, when using OpenNLP maxent from Scala, if a RealValueFileEventStream were an Iterator<Event>, I could write:
>   for (event <- stream) {
>     ...
>   }
> But since it's not, I instead have to wrap it in an Iterator:
>   val events = new Iterator[Event] {
>     def hasNext = stream.hasNext
>     def next = stream.next
>   }
>   for (event <- events) {
>     ...
>   }
> Or write the while loop version:
>   while (stream.hasNext) {
>     val event = stream.next
>     ...
>   }

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira