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

Chen Tao updated MATH-1522:
---------------------------
    Description: 
The generic parameter on class "ClusterRanking“ is unnecessary, 
it is redundancy on define a variable, and hard to reuse(it could be):

{code:java}
ClusterRanking<DoublePoint> evaluator = new SumOfClusterVariances<>();
List<Cluster<DoublePoint>> clusters1 = ...
evaluator.compute(clusters1); // It is OK.
...
// It could be reused globally, but now trigger a compile error
List<Cluster<MyClusterable>> clusters2 = ...
evaluator.compute(clusters2); // Compile error
{code}


The generic parameter of ClusterRanking can be move onto method: 
{code:java}
@FunctionalInterface
public interface ClusterRanking {
    /**
     * Computes the rank (higher is better).
     *
     * @param clusters Clusters to be evaluated.
     * @return the rank of the provided {@code clusters}.
     */
    <T extends Clusterable> double compute(List<? extends Cluster<T>> clusters);
}
{code}

Then we can define a ClusterRanking easier and reuse it globally:
{code:java}
// The variable define is simple now.
ClusterRanking evaluator = new SumOfClusterVariances();
...
List<Cluster<DoublePoint>> clusters1 = ...
double score1 = evaluator.compute(clusters1); // OK.
...
// It can be reused globally now.
List<Cluster<MyClusterable>> clusters2 = ...
double score2 = evaluator.compute(clusters2); // OK.
{code}

  was:
The generic parameter on class "ClusterRanking“ is unnecessary, 
it is redundancy on define a variable, and hard to reuse(it could be):

{code:java}
ClusterRanking<DoublePoint> evaluator = new SumOfClusterVariances<>();
List<Cluster<DoublePoint>> clusters1 = ...
evaluator.compute(clusters1); // It is OK.
...
// It could be reused globally, but now trigger a compile error
List<Cluster<MyClusterable>> clusters2 = ...
evaluator.compute(clusters2); // Compile error
{code}


The generic parameter of ClusterRanking can be move to method: 
{code:java}
@FunctionalInterface
public interface ClusterRanking {
    /**
     * Computes the rank (higher is better).
     *
     * @param clusters Clusters to be evaluated.
     * @return the rank of the provided {@code clusters}.
     */
    <T extends Clusterable> double compute(List<? extends Cluster<T>> clusters);
}
{code}

Then we can define a ClusterRanking easier and reuse it globally:
{code:java}
// The variable define is simple now.
ClusterRanking evaluator = new SumOfClusterVariances();
...
List<Cluster<DoublePoint>> clusters1 = ...
double score1 = evaluator.compute(clusters1); // OK.
...
// It can be reused globally now.
List<Cluster<MyClusterable>> clusters2 = ...
double score2 = evaluator.compute(clusters2); // OK.
{code}


> The generic parameter of ClusterRanking can move onto method
> ------------------------------------------------------------
>
>                 Key: MATH-1522
>                 URL: https://issues.apache.org/jira/browse/MATH-1522
>             Project: Commons Math
>          Issue Type: Improvement
>            Reporter: Chen Tao
>            Priority: Major
>
> The generic parameter on class "ClusterRanking“ is unnecessary, 
> it is redundancy on define a variable, and hard to reuse(it could be):
> {code:java}
> ClusterRanking<DoublePoint> evaluator = new SumOfClusterVariances<>();
> List<Cluster<DoublePoint>> clusters1 = ...
> evaluator.compute(clusters1); // It is OK.
> ...
> // It could be reused globally, but now trigger a compile error
> List<Cluster<MyClusterable>> clusters2 = ...
> evaluator.compute(clusters2); // Compile error
> {code}
> The generic parameter of ClusterRanking can be move onto method: 
> {code:java}
> @FunctionalInterface
> public interface ClusterRanking {
>     /**
>      * Computes the rank (higher is better).
>      *
>      * @param clusters Clusters to be evaluated.
>      * @return the rank of the provided {@code clusters}.
>      */
>     <T extends Clusterable> double compute(List<? extends Cluster<T>> 
> clusters);
> }
> {code}
> Then we can define a ClusterRanking easier and reuse it globally:
> {code:java}
> // The variable define is simple now.
> ClusterRanking evaluator = new SumOfClusterVariances();
> ...
> List<Cluster<DoublePoint>> clusters1 = ...
> double score1 = evaluator.compute(clusters1); // OK.
> ...
> // It can be reused globally now.
> List<Cluster<MyClusterable>> clusters2 = ...
> double score2 = evaluator.compute(clusters2); // OK.
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to