001/** 002 * Copyright (c) 2012, 2015, Credit Suisse (Anatole Tresch), Werner Keil and others by the @author tag. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016package org.javamoney.moneta.function; 017 018import javax.money.CurrencyUnit; 019import javax.money.MonetaryAmount; 020 021/** 022 * A state object for collecting statistics such as count, min, max, sum, and 023 * average. 024 * @author otaviojava 025 * @author Anatole Tresch 026 */ 027public interface MonetarySummaryStatistics { 028 029 /** 030 * Records another value into the summary information. 031 * @param amount 032 * the input amount value to be added, not null. 033 */ 034 void accept(MonetaryAmount amount); 035 036 /** 037 * Combines the state of another {@code MonetarySummaryStatistics} into this 038 * one. 039 * @param summaryStatistics 040 * another {@code MonetarySummaryStatistics}, not null. 041 */ 042 MonetarySummaryStatistics combine( 043 MonetarySummaryStatistics summaryStatistics); 044 045 /** 046 * Get the number of items added to this summary instance. 047 * @return the number of summarized items, >= 0. 048 */ 049 long getCount(); 050 051 /** 052 * Get the minimal amount found within this summary. 053 * @return the minimal amount, or null if no amount was added to this summary instance. 054 */ 055 MonetaryAmount getMin(); 056 057 /** 058 * Get the maximal amount found within this summary. 059 * @return the minimal amount, or null if no amount was added to this summary instance. 060 */ 061 MonetaryAmount getMax(); 062 063 /** 064 * Get the sum of all amounts within this summary. 065 * @return the total amount, or null if no amount was added to this summary instance. 066 */ 067 MonetaryAmount getSum(); 068 069 /** 070 * Get the mean average of all amounts added. 071 * @return the mean average amount, or null if no amount was added to this summary instance. 072 */ 073 MonetaryAmount getAverage(); 074 075 /** 076 * the currency unit used in summary 077 * @return the currency unit 078 */ 079 CurrencyUnit getCurrencyUnit(); 080 081 /** 082 * return if is possible do exchange rate or not with the MonetarySummary 083 * @return false; 084 */ 085 boolean isExchangeable(); 086 087 /** 088 * created the MonetarySummaryStatistics converted to {@link CurrencyUnit} 089 * @param unit 090 * to be converted 091 * @return MonetarySummaryStatistics converted 092 * @throws UnsupportedOperationException 093 * if {@link MonetarySummaryStatistics#isExchangeable()} was 094 * false 095 * @throws NullPointerException 096 * if unit was null 097 */ 098 MonetarySummaryStatistics to(CurrencyUnit unit); 099 100}