package com.thealgorithms.conversions;
import static java.util.Map.entry;
import java.util.Map;
import org.apache.commons.lang3.tuple.Pair;
/**
* A utility class to perform unit conversions between different measurement systems.
*
*
Currently, the class supports temperature conversions between several scales:
* Celsius, Fahrenheit, Kelvin, Réaumur, Delisle, and Rankine.
*
*
Example Usage
*
* double result = UnitConversions.TEMPERATURE.convert("Celsius", "Fahrenheit", 100.0);
* // Output: 212.0 (Celsius to Fahrenheit conversion of 100°C)
*
*
* This class makes use of an {@link UnitsConverter} that handles the conversion logic
* based on predefined affine transformations. These transformations include scaling factors
* and offsets for temperature conversions.
*
*
Temperature Scales Supported
*
* - Celsius
* - Fahrenheit
* - Kelvin
* - Réaumur
* - Delisle
* - Rankine
*
*/
public final class UnitConversions {
private UnitConversions() {
}
/**
* A preconfigured instance of {@link UnitsConverter} for temperature conversions.
* The converter handles conversions between the following temperature units:
*
* - Kelvin to Celsius
* - Celsius to Fahrenheit
* - Réaumur to Celsius
* - Delisle to Celsius
* - Rankine to Kelvin
*
*/
public static final UnitsConverter TEMPERATURE = new UnitsConverter(Map.ofEntries(entry(Pair.of("Kelvin", "Celsius"), new AffineConverter(1.0, -273.15)), entry(Pair.of("Celsius", "Fahrenheit"), new AffineConverter(9.0 / 5.0, 32.0)),
entry(Pair.of("Réaumur", "Celsius"), new AffineConverter(5.0 / 4.0, 0.0)), entry(Pair.of("Delisle", "Celsius"), new AffineConverter(-2.0 / 3.0, 100.0)), entry(Pair.of("Rankine", "Kelvin"), new AffineConverter(5.0 / 9.0, 0.0))));
}