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 ObjDoubleConsumer Interface - Complete Tutorial with Examples Java ObjDoubleConsumer InterfaceLast modified: April 16, 2025
The
ObjDoubleConsumer Interface Overview
@FunctionalInterface
public interface ObjDoubleConsumer<T> {
void accept(T t, double value);
}
The code above shows the structure of Basic ObjDoubleConsumer UsageThe simplest way to use ObjDoubleConsumer is with lambda expressions. We define how to consume the object and double values in the accept method. The example shows a consumer that prints both values. Main.java
package com.zetcode;
import java.util.function.ObjDoubleConsumer;
public class Main {
public static void main(String[] args) {
// Define a consumer that prints object and double
ObjDoubleConsumer<String> printer = (s, d) ->
System.out.println("String: " + s + ", Double: " + d);
// Use the consumer
printer.accept("Price", 19.99);
printer.accept("Weight", 2.5);
// Consumer with more complex logic
ObjDoubleConsumer<String> formatter = (label, value) ->
System.out.printf("%s: %.2f%n", label, value);
formatter.accept("Temperature", 23.4567);
}
}
This example demonstrates basic ObjDoubleConsumer usage with lambda expressions. The printer consumer takes a String and double, printing both. The formatter shows more complex formatting of the double value. Consumers don't return values. Using ObjDoubleConsumer with Collections
Main.java
package com.zetcode;
import java.util.HashMap;
import java.util.Map;
import java.util.function.ObjDoubleConsumer;
public class Main {
public static void main(String[] args) {
Map<String, Double> products = new HashMap<>();
products.put("Laptop", 999.99);
products.put("Mouse", 25.50);
products.put("Keyboard", 49.99);
// Consumer to apply discount
ObjDoubleConsumer<String> discountApplier = (name, price) -> {
double discounted = price * 0.9; // 10% discount
System.out.printf("%s: $%.2f -> $%.2f%n", name, price, discounted);
};
// Apply to all products
products.forEach(discountApplier::accept);
}
}
This example shows ObjDoubleConsumer used with a Map. The discountApplier consumer calculates and prints discounted prices. We use method reference syntax with forEach to apply the consumer to all map entries. ObjDoubleConsumer in Object ProcessingWe can use ObjDoubleConsumer to modify object properties based on double values. This example demonstrates updating product inventory quantities. Main.java
package com.zetcode;
import java.util.function.ObjDoubleConsumer;
class Product {
String name;
double quantity;
Product(String name, double quantity) {
this.name = name;
this.quantity = quantity;
}
void display() {
System.out.printf("%s: %.1f kg%n", name, quantity);
}
}
public class Main {
public static void main(String[] args) {
Product apple = new Product("Apple", 10.5);
Product banana = new Product("Banana", 7.2);
// Consumer to add to inventory
ObjDoubleConsumer<Product> addToStock = (p, q) -> p.quantity += q;
// Apply consumer
addToStock.accept(apple, 2.3);
addToStock.accept(banana, 1.8);
apple.display();
banana.display();
}
}
This example shows ObjDoubleConsumer modifying object state. The addToStock consumer increases product quantities. The consumer directly modifies the Product object's quantity field based on the double value provided. ObjDoubleConsumer with Primitive Arrays
Main.java
package com.zetcode;
import java.util.function.ObjDoubleConsumer;
public class Main {
public static void main(String[] args) {
String[] students = {"Alice", "Bob", "Charlie"};
double[] weights = {0.3, 0.4, 0.3};
double[] scores = {85.0, 92.0, 78.0};
// Consumer to calculate weighted score
ObjDoubleConsumer<String> scoreCalculator = (name, weight) -> {
int index = java.util.Arrays.asList(students).indexOf(name);
double weighted = scores[index] * weight;
System.out.printf("%s: %.1f * %.1f = %.1f%n",
name, scores[index], weight, weighted);
};
// Process each student
for (int i = 0; i < students.length; i++) {
scoreCalculator.accept(students[i], weights[i]);
}
}
}
This example demonstrates ObjDoubleConsumer processing parallel arrays. The scoreCalculator consumer matches each student with their weight and score. It calculates and prints the weighted score for each student. Combining ObjDoubleConsumer with Other Interfaces
Main.java
package com.zetcode;
import java.util.function.ObjDoubleConsumer;
import java.util.function.DoublePredicate;
public class Main {
public static void main(String[] args) {
// Consumer for high-value transactions
ObjDoubleConsumer<String> transactionLogger = (account, amount) ->
System.out.printf("Large transaction: %s - $%.2f%n", account, amount);
// Predicate to filter high amounts
DoublePredicate isLarge = amount -> amount >= 1000.0;
// Process transactions
processTransaction("ACCT-123", 1500.0, isLarge, transactionLogger);
processTransaction("ACCT-456", 500.0, isLarge, transactionLogger);
}
static void processTransaction(String account, double amount,
DoublePredicate filter, ObjDoubleConsumer<String> consumer) {
if (filter.test(amount)) {
consumer.accept(account, amount);
}
}
}
This example combines ObjDoubleConsumer with DoublePredicate. The processTransaction method only invokes the consumer if the amount passes the filter. This pattern enables flexible composition of operations. ObjDoubleConsumer in Stream Processing
While not directly used in streams like some other functional interfaces,
Main.java
package com.zetcode;
import java.util.function.ObjDoubleConsumer;
import java.util.stream.DoubleStream;
public class Main {
public static void main(String[] args) {
// Consumer to accumulate statistics
class Stats {
double sum = 0;
int count = 0;
}
Stats stats = new Stats();
ObjDoubleConsumer<Stats> statsUpdater = (s, value) -> {
s.sum += value;
s.count++;
};
// Process stream of doubles
DoubleStream.of(12.5, 8.3, 15.7, 20.1, 5.4)
.forEach(d -> statsUpdater.accept(stats, d));
System.out.printf("Count: %d, Sum: %.1f, Avg: %.2f%n",
stats.count, stats.sum, stats.sum / stats.count);
}
}
This example uses ObjDoubleConsumer to accumulate statistics from a DoubleStream. The statsUpdater consumer maintains running totals in the Stats object. This shows how consumers can maintain state during stream processing. Specialized Variants of Consumer
Java provides several specialized consumer interfaces for different combinations
of input types. These include Main.java
package com.zetcode;
import java.util.function.BiConsumer;
import java.util.function.DoubleConsumer;
import java.util.function.ObjDoubleConsumer;
public class Main {
public static void main(String[] args) {
// ObjDoubleConsumer example
ObjDoubleConsumer<String> objDoublePrinter = (s, d) ->
System.out.println(s + ": " + d);
objDoublePrinter.accept("Value", 3.14);
// BiConsumer example (two generic types)
BiConsumer<String, Double> biPrinter = (s, d) ->
System.out.println(s + ": " + d);
biPrinter.accept("BiValue", 2.71);
// DoubleConsumer example (primitive specialization)
DoubleConsumer doublePrinter = d ->
System.out.println("Double: " + d);
doublePrinter.accept(1.618);
}
}
This example compares SourceJava ObjDoubleConsumer Interface Documentation In this article, we've covered the essential methods and features of the Java ObjDoubleConsumer interface. Understanding these concepts helps in writing expressive code for operations that consume object and double values. 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. |