You need to provide a SortBy
to your Query
object.
So for example the following code sorts the US States dataset by population (PERSONS
):
URL u = TestData.url("shapes/statepop.shp");
FileDataStore store = FileDataStoreFinder.getDataStore(u);
SimpleFeatureType schema = store.getSchema();
Query query = new Query(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 = store.getFeatureSource().getFeatures(query);
try (SimpleFeatureIterator itr = features.features()) {
while (itr.hasNext()) {
SimpleFeature feature = itr.next();
System.out.println(feature.getAttribute("STATE_NAME") + "\t" + feature.getAttribute("PERSONS"));
}
}
Or if, as in your case, you have a FeatureCollection
and no FeatureSource
you can wrap them using the DataUtilities
class:
File gmlFile = new File("/home/ian/Downloads/states.xml");
InputStream gmlInStream = new FileInputStream(gmlFile);
GML gml = new GML(Version.WFS1_0);
features = gml.decodeFeatureCollection(gmlInStream);
query = new Query();
query.setSortBy(new SortBy[] { ff.sort("name", SortOrder.DESCENDING) });
features = DataUtilities.source(features).getFeatures(query);
try (SimpleFeatureIterator itr = features.features()) {
while (itr.hasNext()) {
SimpleFeature feature = itr.next();
System.out.println(feature.getAttribute("name") + "\t" + feature.getAttribute("pop_2018"));
}
}