GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing zetcode.com — Java DoubleFunction Interface - Complete Tutorial with Examples Java DoubleFunction InterfaceLast modified: April 16, 2025
The
DoubleFunction Interface Overview
@FunctionalInterface
public interface DoubleFunction<R> {
R apply(double value);
}
The code above shows the simple structure of Basic DoubleFunction UsageThe simplest way to use DoubleFunction is with lambda expressions. We define how to transform the input double to the desired output type. This example converts doubles to their string representations. Main.java
package com.zetcode;
import java.util.function.DoubleFunction;
public class Main {
public static void main(String[] args) {
// Define a function that takes double and returns String
DoubleFunction<String> doubleToString = d -> "Value: " + d;
// Apply the function
System.out.println(doubleToString.apply(3.1415));
System.out.println(doubleToString.apply(2.71828));
// Function with formatting
DoubleFunction<String> formatted = d -> String.format("Formatted: %.2f", d);
System.out.println(formatted.apply(1.23456789));
}
}
This example demonstrates basic DoubleFunction usage with lambda expressions. We create two functions that take doubles and return formatted strings. The second function shows number formatting directly in the lambda. DoubleFunction with Method ReferenceMethod references provide concise syntax for existing methods that match the DoubleFunction signature. This example uses Double.toString as a method reference. Main.java
package com.zetcode;
import java.util.function.DoubleFunction;
public class Main {
public static void main(String[] args) {
// Using method reference to Double.toString()
DoubleFunction<String> toStringRef = Double::toString;
System.out.println("String value: " + toStringRef.apply(123.456));
// Using constructor reference
DoubleFunction<Double> doubleConstructor = Double::new;
Double d = doubleConstructor.apply(42.0);
System.out.println("Created Double: " + d);
}
}
This example shows DoubleFunction with method and constructor references. The first case uses Double.toString() method. The second case demonstrates object creation via constructor reference. DoubleFunction in Stream ProcessingDoubleFunction is commonly used with DoubleStream for processing primitive double values. This avoids boxing overhead compared to using regular Function. Main.java
package com.zetcode;
import java.util.stream.DoubleStream;
public class Main {
public static void main(String[] args) {
// Create DoubleStream of values
DoubleStream stream = DoubleStream.of(1.1, 2.2, 3.3, 4.4, 5.5);
// Process stream with DoubleFunction
stream.mapToObj(d -> "Number: " + d * 2)
.forEach(System.out::println);
// Alternative with separate DoubleFunction
DoubleFunction<String> formatter = d -> String.format("$%.2f", d);
DoubleStream.of(9.99, 19.95, 29.50)
.mapToObj(formatter)
.forEach(System.out::println);
}
}
This example demonstrates DoubleFunction in stream processing. We use both inline lambda and separate DoubleFunction to transform stream elements. The mapToObj method accepts DoubleFunction to convert doubles to objects. DoubleFunction for Mathematical OperationsDoubleFunction is ideal for mathematical operations that take double inputs. This example shows various mathematical transformations applied to input values. Main.java
package com.zetcode;
import java.util.function.DoubleFunction;
public class Main {
public static void main(String[] args) {
// Square root function
DoubleFunction<Double> sqrt = Math::sqrt;
System.out.println("Square root of 16: " + sqrt.apply(16.0));
// Trigonometric function
DoubleFunction<Double> sinDegrees = d -> Math.sin(Math.toRadians(d));
System.out.println("Sin of 30 degrees: " + sinDegrees.apply(30.0));
// Custom mathematical operation
DoubleFunction<String> quadratic = x -> {
double result = 2*x*x + 3*x + 5;
return "2x² + 3x + 5 for x=" + x + " is " + result;
};
System.out.println(quadratic.apply(2.0));
}
}
This example shows DoubleFunction for mathematical operations. We use method references for existing Math methods and define custom operations. The interface works well with both simple and complex mathematical transformations. DoubleFunction with CollectionsDoubleFunction can be used to process collections containing double values. This example demonstrates converting an array of doubles to different representations. Main.java
package com.zetcode;
import java.util.Arrays;
import java.util.List;
import java.util.function.DoubleFunction;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
double[] values = {1.5, 2.5, 3.5, 4.5, 5.5};
// Convert doubles to temperature strings
DoubleFunction<String> toFahrenheit = c -> {
double f = c * 9/5 + 32;
return String.format("%.1f°C = %.1f°F", c, f);
};
List<String> temps = Arrays.stream(values)
.mapToObj(toFahrenheit)
.collect(Collectors.toList());
temps.forEach(System.out::println);
// Convert to measurement strings
DoubleFunction<String> toInches = cm -> String.format("%.2f cm = %.2f in", cm, cm / 2.54);
Arrays.stream(values).mapToObj(toInches).forEach(System.out::println);
}
}
This example shows DoubleFunction processing arrays of primitive doubles. We convert Celsius to Fahrenheit and centimeters to inches. The stream processing with mapToObj is efficient as it avoids boxing individual elements. Combining DoubleFunction with Other Functional InterfacesDoubleFunction can be combined with other functional interfaces for more complex operations. This example shows composition with Predicate and Consumer. Main.java
package com.zetcode;
import java.util.function.DoubleFunction;
import java.util.function.DoublePredicate;
import java.util.function.DoubleConsumer;
public class Main {
public static void main(String[] args) {
// Define predicate to check if value is positive
DoublePredicate isPositive = d -> d > 0;
// Define function to create description
DoubleFunction<String> describer = d ->
isPositive.test(d) ? "Positive" : "Non-positive";
// Define consumer to print results
DoubleConsumer printer = d ->
System.out.println(d + " is " + describer.apply(d));
// Test values
printer.accept(3.14);
printer.accept(-2.5);
printer.accept(0.0);
// Chain operations
DoubleFunction<String> complexOp = d -> {
double abs = Math.abs(d);
double sqrt = Math.sqrt(abs);
return String.format("|%.2f| = %.2f, √%.2f = %.2f",
d, abs, abs, sqrt);
};
System.out.println(complexOp.apply(-16.0));
}
}
This example demonstrates combining DoubleFunction with other functional interfaces. We create a pipeline that checks values, describes them, and prints results. The complex operation shows how to chain multiple transformations. SourceJava DoubleFunction Interface Documentation In this article, we've covered the essential methods and features of the Java DoubleFunction interface. Understanding these concepts helps write efficient numeric processing code in modern Java applications. AuthorMy name is Jan Bodnar, and I am a dedicated programmer with many years of experience in the field. I began writing programming articles in 2007 and have since authored over 1,400 articles and eight e-books. With more than eight years of teaching experience, I am committed to sharing my knowledge and helping others master programming concepts. List all Java tutorials. |
| You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |