1 /** 2 * Investor, the open-source investment library 3 * 4 * (C) Copyright 2008, by individual contributors as indicated by the @author tag. 5 * 6 * This library is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU Lesser General Public License as 8 * published by the Free Software Foundation; either version 2.1 of 9 * the License, or (at your option) any later version. 10 * 11 * This software is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this software; if not, write to the Free 18 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 19 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 20 */ 21 package com.nickokiss.investor.fin.element; 22 23 import java.math.BigDecimal; 24 import java.util.Comparator; 25 26 import com.nickokiss.investor.calc.CashFlowStreamCalc; 27 28 /** 29 * Use when investment can be repeatedly reinvested 30 * 31 * @author Tomasz Koscinski <tomasz.koscinski@nickokiss.com> 32 */ 33 public class CashFlowIRRComparator implements Comparator<CashFlowStream> { 34 35 private int scale; 36 37 public CashFlowIRRComparator(int scale) { 38 super(); 39 this.scale = scale; 40 } 41 42 public int getScale() { 43 return scale; 44 } 45 46 public void setScale(int scale) { 47 this.scale = scale; 48 } 49 50 @Override 51 public int compare(CashFlowStream cfs1, CashFlowStream cfs2) { 52 CashFlowStreamCalc calc = new CashFlowStreamCalc(); 53 BigDecimal irr1 = calc.getInternalRateOfReturn(cfs1, scale); 54 BigDecimal irr2 = calc.getInternalRateOfReturn(cfs2, scale); 55 irr1 = irr1.setScale(scale, BigDecimal.ROUND_HALF_UP); 56 irr2 = irr2.setScale(scale, BigDecimal.ROUND_HALF_UP); 57 return irr1.compareTo(irr2); 58 } 59 }