Sorting a FeatureCollection
One of the commonly asked questions that GeoTools users have is in the use of FeatureCollections and DataStores. This post discusses how to sort a set of features based on attributes. The following code shows how to load a shapefile and the build a Query object to sort the results.
File file = new File("../../data/states.shp");
FileDataStore store = FileDataStoreFinder.getDataStore(file);
SimpleFeatureSource featureSource = store.getFeatureSource();
SimpleFeatureType schema = featureSource.getSchema();
Query query = new DefaultQuery(schema.getTypeName(), Filter.INCLUDE,
new String[] { "STATE_NAME", "PERSONS", "WORKERS" });
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2();
query.setSortBy(new SortBy[] { ff.sort("PERSONS", SortOrder.ASCENDING) });
SimpleFeatureCollection features = featureSource.getFeatures(query);
SimpleFeatureIterator features2 = features.features();
try {
while (features2.hasNext()) {
SimpleFeature next = features2.next();
System.out.println("\t"+next.getAttribute("STATE_NAME")+": "+next.getAttribute("PERSONS"));
}
} finally {
features2.close();
}
Running this program will produce the following output:
Wyoming: 453588.0
Vermont: 562758.0
District of Columbia: 606900.0
North Dakota: 638800.0
Delaware: 666168.0
South Dakota: 696004.0
Montana: 799065.0
[....]
Illinois: 1.1430602E7
Pennsylvania: 1.1881643E7
Florida: 1.2937926E7
Texas: 1.712202E7
New York: 1.8235907E7
California: 2.9760021E7