[ 
https://issues.apache.org/jira/browse/QUARKS-18?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15195483#comment-15195483
 ] 

ASF GitHub Bot commented on QUARKS-18:
--------------------------------------

Github user ddebrunner commented on a diff in the pull request:

    https://github.com/apache/incubator-quarks/pull/11#discussion_r56183501
  
    --- Diff: 
spi/topology/src/main/java/quarks/topology/spi/graph/ConnectorStream.java ---
    @@ -96,6 +89,35 @@ protected Graph graph() {
         }
     
         @Override
    +    public <E extends Enum<E>> EnumMap<E,TStream<T>> split(Class<E> 
enumClass, Function<T, E> splitter) {
    +
    +        E[] es = enumClass.getEnumConstants();
    +
    +/*
    +        List<TStream<T>> outputs = split(es.length, e -> 
IntStream.range(0, es.length).filter(i-> es[i].equals(splitter.apply(e)))
    +            .mapToObj(i -> es[i].ordinal()).findAny().orElse(-1));
    +*/
    +
    +        List<TStream<T>> outputs = split(es.length, new ToIntFunction<T>() 
{
    --- End diff --
    
    The function is incorrect as it can call the splitter function multiple 
times, I think it can be simplified to something like:
    
    ```
    t -> {E split = spitter.apply(t); return split != null ? split.ordinal() : 
-1;}
    ```
    
    which also implies that when the splitter returns null that the tuple is 
discard which should be documented in the api method's javadoc.


> Split function based upon an enumeration.
> -----------------------------------------
>
>                 Key: QUARKS-18
>                 URL: https://issues.apache.org/jira/browse/QUARKS-18
>             Project: Quarks
>          Issue Type: Improvement
>          Components: API
>            Reporter: Daniel John Debrunner
>            Priority: Minor
>              Labels: newbie
>         Attachments: SplitWithEnum_Screenshot.png
>
>
> An enum based split would be useful.
> Something like:
> <E> List<TStream<T>> split(Class<E> enumClass, Function<T,E> splitter)
> So the stream is split by the enum value with the returned streams in ordinal 
> order.
> This may have the benefit of being self-maintaining, so that if an enum value 
> is added, the returned number of streams changes automatically, but only if 
> given an enum class one can figure out the number of enums.
> Based upon looking at the sample code in QUARKS-16



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to