1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.text.similarity; 18 19 import java.util.Objects; 20 21 /** 22 * Container class to store Levenshtein distance between two character sequences. 23 * 24 * <p>Stores the count of insert, deletion and substitute operations needed to 25 * change one character sequence into another.</p> 26 * 27 * <p>This class is immutable.</p> 28 * 29 * @since 1.0 30 */ 31 public class LevenshteinResults { 32 33 /** 34 * Edit distance. 35 */ 36 private final Integer distance; 37 38 /** 39 * Insert character count. 40 */ 41 private final Integer insertCount; 42 43 /** 44 * Delete character count. 45 */ 46 private final Integer deleteCount; 47 48 /** 49 * Substitute character count. 50 */ 51 private final Integer substituteCount; 52 53 /** 54 * Constructs the results for a detailed Levenshtein distance. 55 * 56 * @param distance distance between two character sequences. 57 * @param insertCount insert character count 58 * @param deleteCount delete character count 59 * @param substituteCount substitute character count 60 */ 61 public LevenshteinResults(final Integer distance, final Integer insertCount, final Integer deleteCount, 62 final Integer substituteCount) { 63 this.distance = distance; 64 this.insertCount = insertCount; 65 this.deleteCount = deleteCount; 66 this.substituteCount = substituteCount; 67 } 68 69 @Override 70 public boolean equals(final Object o) { 71 if (this == o) { 72 return true; 73 } 74 if (o == null || getClass() != o.getClass()) { 75 return false; 76 } 77 final LevenshteinResults result = (LevenshteinResults) o; 78 return Objects.equals(distance, result.distance) && Objects.equals(insertCount, result.insertCount) 79 && Objects.equals(deleteCount, result.deleteCount) 80 && Objects.equals(substituteCount, result.substituteCount); 81 } 82 83 /** 84 * Gets the number of character deletion needed to change one character sequence to other. 85 * 86 * @return delete character count 87 */ 88 public Integer getDeleteCount() { 89 return deleteCount; 90 } 91 92 /** 93 * Gets the distance between two character sequences. 94 * 95 * @return distance between two character sequence 96 */ 97 public Integer getDistance() { 98 return distance; 99 } 100 101 /** 102 * Gets the number of insertion needed to change one character sequence into another. 103 * 104 * @return insert character count 105 */ 106 public Integer getInsertCount() { 107 return insertCount; 108 } 109 110 /** 111 * Gets the number of character substitution needed to change one character sequence into another. 112 * 113 * @return substitute character count 114 */ 115 public Integer getSubstituteCount() { 116 return substituteCount; 117 } 118 119 @Override 120 public int hashCode() { 121 return Objects.hash(distance, insertCount, deleteCount, substituteCount); 122 } 123 124 @Override 125 public String toString() { 126 return "Distance: " + distance + ", Insert: " + insertCount + ", Delete: " + deleteCount + ", Substitute: " 127 + substituteCount; 128 } 129 }