Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.solr.client.solrj.response; import org.apache.solr.common.util.NamedList; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Holds stats info * * * @since solr 1.4 */ public class FieldStatsInfo implements Serializable { final String name; Object min; Object max; Object sum; Long count; Long countDistinct; Collection<Object> distinctValues; Long missing; Object mean = null; Double sumOfSquares = null; Double stddev = null; Long cardinality = null; Map<String, List<FieldStatsInfo>> facets; Map<Double, Double> percentiles; public FieldStatsInfo(NamedList<Object> nl, String fname) { name = fname; for (Map.Entry<String, Object> entry : nl) { if ("min".equals(entry.getKey())) { min = entry.getValue(); } else if ("max".equals(entry.getKey())) { max = entry.getValue(); } else if ("sum".equals(entry.getKey())) { sum = entry.getValue(); } else if ("count".equals(entry.getKey())) { count = (Long) entry.getValue(); } else if ("countDistinct".equals(entry.getKey())) { countDistinct = (Long) entry.getValue(); } else if ("distinctValues".equals(entry.getKey())) { distinctValues = (Collection<Object>) entry.getValue(); } else if ("missing".equals(entry.getKey())) { missing = (Long) entry.getValue(); } else if ("mean".equals(entry.getKey())) { mean = entry.getValue(); } else if ("sumOfSquares".equals(entry.getKey())) { sumOfSquares = (Double) entry.getValue(); } else if ("stddev".equals(entry.getKey())) { stddev = (Double) entry.getValue(); } else if ("facets".equals(entry.getKey())) { @SuppressWarnings("unchecked") NamedList<Object> fields = (NamedList<Object>) entry.getValue(); facets = new HashMap<>(); for (Map.Entry<String, Object> ev : fields) { List<FieldStatsInfo> vals = new ArrayList<>(); facets.put(ev.getKey(), vals); @SuppressWarnings("unchecked") NamedList<NamedList<Object>> vnl = (NamedList<NamedList<Object>>) ev.getValue(); for (int i = 0; i < vnl.size(); i++) { String n = vnl.getName(i); vals.add(new FieldStatsInfo(vnl.getVal(i), n)); } } } else if ("percentiles".equals(entry.getKey())) { @SuppressWarnings("unchecked") NamedList<Object> fields = (NamedList<Object>) entry.getValue(); percentiles = new LinkedHashMap<>(); for (Map.Entry<String, Object> ev : fields) { percentiles.put(Double.parseDouble(ev.getKey()), (Double) ev.getValue()); } } else if ("cardinality".equals(entry.getKey())) { cardinality = (Long) entry.getValue(); } else { throw new RuntimeException("unknown key: " + entry.getKey() + " [" + entry.getValue() + "]"); } } } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(name); sb.append(": {"); if (min != null) { sb.append(" min:").append(min); } if (max != null) { sb.append(" max:").append(max); } if (sum != null) { sb.append(" sum:").append(sum); } if (count != null) { sb.append(" count:").append(count); } if (countDistinct != null) { sb.append(" countDistinct:").append(countDistinct); } if (distinctValues != null) { sb.append(" distinctValues:").append(distinctValues); } if (missing != null) { sb.append(" missing:").append(missing); } if (mean != null) { sb.append(" mean:").append(mean); } if (stddev != null) { sb.append(" stddev:").append(stddev); } if (percentiles != null) { sb.append(" percentiles:").append(percentiles); } if (cardinality != null) { sb.append(" cardinality:").append(cardinality); } sb.append(" }"); return sb.toString(); } public String getName() { return name; } public Object getMin() { return min; } public Object getMax() { return max; } public Object getSum() { return sum; } public Long getCount() { return count; } public Long getCountDistinct() { // :TODO: as client convinience, should we return cardinality if this is null? return countDistinct; } public Collection<Object> getDistinctValues() { return distinctValues; } public Long getMissing() { return missing; } public Object getMean() { return mean; } public Double getStddev() { return stddev; } public Double getSumOfSquares() { return sumOfSquares; } public Map<String, List<FieldStatsInfo>> getFacets() { return facets; } /** * The percentiles requested if any, otherwise null. If non-null then the * iteration order will match the order the percentiles were originally specified in. */ public Map<Double, Double> getPercentiles() { return percentiles; } /** * The cardinality of of the set of values if requested, otherwise null. */ public Long getCardinality() { // :TODO: as client convinience, should we return countDistinct if this is null? return cardinality; } }