summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/result/ResultUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/result/ResultUtil.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/result/ResultUtil.java68
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;