diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/result/ResultUtil.java')
-rw-r--r-- | src/de/lmu/ifi/dbs/elki/result/ResultUtil.java | 68 |
1 files changed, 12 insertions, 56 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/result/ResultUtil.java b/src/de/lmu/ifi/dbs/elki/result/ResultUtil.java index 1666d6fc..921e7dd2 100644 --- a/src/de/lmu/ifi/dbs/elki/result/ResultUtil.java +++ b/src/de/lmu/ifi/dbs/elki/result/ResultUtil.java @@ -30,21 +30,14 @@ import java.util.Iterator; import java.util.List; import de.lmu.ifi.dbs.elki.algorithm.clustering.ClusteringAlgorithm; -import de.lmu.ifi.dbs.elki.algorithm.clustering.trivial.ByLabelHierarchicalClustering; -import de.lmu.ifi.dbs.elki.algorithm.clustering.trivial.TrivialAllInOne; +import de.lmu.ifi.dbs.elki.algorithm.clustering.trivial.ByLabelOrAllInOneClustering; import de.lmu.ifi.dbs.elki.data.Clustering; import de.lmu.ifi.dbs.elki.data.NumberVector; import de.lmu.ifi.dbs.elki.data.model.Model; -import de.lmu.ifi.dbs.elki.data.type.NoSupportedDataTypeException; import de.lmu.ifi.dbs.elki.database.Database; import de.lmu.ifi.dbs.elki.database.relation.Relation; import de.lmu.ifi.dbs.elki.result.outlier.OutlierResult; import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; -import de.lmu.ifi.dbs.elki.utilities.iterator.EmptyIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.IterableIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.MergedIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.OneItemIterator; -import de.lmu.ifi.dbs.elki.utilities.iterator.TypeFilterIterator; /** * Utilities for handling result objects @@ -195,7 +188,8 @@ public class ResultUtil { res.add((C) restrictionClass.cast(r)); } if(r instanceof HierarchicalResult) { - for(Result result : ((HierarchicalResult) r).getHierarchy().iterDescendants(r)) { + for(Iterator<Result> iter = ((HierarchicalResult) r).getHierarchy().iterDescendants(r); iter.hasNext();) { + Result result = iter.next(); if(restrictionClass.isInstance(result)) { res.add((C) restrictionClass.cast(result)); } @@ -204,38 +198,6 @@ public class ResultUtil { return res; } - @SuppressWarnings("unchecked") - public static <C extends Result> IterableIterator<C> filteredResults(Result r, Class<?> restrictionClass) { - final Class<C> rc = (Class<C>) restrictionClass; - // Include the current item - IterableIterator<C> curIter; - if(rc.isInstance(r)) { - curIter = new OneItemIterator<C>(rc.cast(r)); - } - else { - curIter = null; - } - if(r instanceof HierarchicalResult) { - ResultHierarchy hier = ((HierarchicalResult) r).getHierarchy(); - final Iterable<Result> iterDescendants = hier.iterDescendants(r); - final IterableIterator<C> others = new TypeFilterIterator<Result, C>(rc, iterDescendants); - if(curIter != null) { - return new MergedIterator<C>(curIter, others); - } - else { - return others; - } - } - else { - if(curIter != null) { - return curIter; - } - else { - return EmptyIterator.STATIC(); - } - } - } - /** * Ensure that the result contains at least one Clustering. * @@ -246,15 +208,9 @@ public class ResultUtil { public static <O> void ensureClusteringResult(final Database db, final Result result) { Collection<Clustering<?>> clusterings = ResultUtil.filterResults(result, Clustering.class); if(clusterings.size() == 0) { - try { - ClusteringAlgorithm<Clustering<Model>> split = new ByLabelHierarchicalClustering(); - Clustering<Model> c = split.run(db); - addChildResult(db, c); - } - catch(NoSupportedDataTypeException e) { - Clustering<Model> c = (new TrivialAllInOne()).run(db); - addChildResult(db, c); - } + ClusteringAlgorithm<Clustering<Model>> split = new ByLabelOrAllInOneClustering(); + Clustering<Model> c = split.run(db); + addChildResult(db, c); } } @@ -265,9 +221,9 @@ public class ResultUtil { * @return selection result */ public static SelectionResult ensureSelectionResult(final Database db) { - Iterator<SelectionResult> selections = ResultUtil.filteredResults(db, SelectionResult.class); - if(selections.hasNext()) { - return selections.next(); + List<SelectionResult> selections = ResultUtil.filterResults(db, SelectionResult.class); + if(!selections.isEmpty()) { + return selections.get(0); } SelectionResult sel = new SelectionResult(); addChildResult(db, sel); @@ -323,9 +279,9 @@ public class ResultUtil { * @return Database */ public static Database findDatabase(Result baseResult) { - final IterableIterator<Database> iter = filteredResults(baseResult, Database.class); - if(iter.hasNext()) { - return iter.next(); + final List<Database> dbs = filterResults(baseResult, Database.class); + if(!dbs.isEmpty()) { + return dbs.get(0); } else { return null; |