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 IntConsumer Interface - Complete Tutorial with Examples Java IntConsumer InterfaceLast modified: April 16, 2025
The
IntConsumer Interface Overview
@FunctionalInterface
public interface IntConsumer {
void accept(int value);
default IntConsumer andThen(IntConsumer after);
}
The code above shows the structure of Basic IntConsumer UsageThe simplest way to use IntConsumer is with lambda expressions. We define what to do with the input int value in the accept method. The example prints numbers. Main.java
package com.zetcode;
import java.util.function.IntConsumer;
public class Main {
public static void main(String[] args) {
// Define a consumer that prints the number
IntConsumer printNumber = n -> System.out.println("Number: " + n);
// Use the consumer
printNumber.accept(5);
printNumber.accept(10);
// Consumer that squares the number and prints
IntConsumer squareAndPrint = n -> System.out.println(n + " squared: " + n * n);
squareAndPrint.accept(4);
}
}
This example demonstrates basic IntConsumer usage with lambda expressions. The printNumber consumer simply prints the input value. The squareAndPrint consumer performs a calculation before printing. Consumers are useful for side effects. Chaining Consumers with andThen
The Main.java
package com.zetcode;
import java.util.function.IntConsumer;
public class Main {
public static void main(String[] args) {
// First consumer prints the number
IntConsumer print = n -> System.out.println("Original: " + n);
// Second consumer prints the number doubled
IntConsumer printDouble = n -> System.out.println("Doubled: " + n * 2);
// Chain the consumers
IntConsumer combined = print.andThen(printDouble);
// Execute the chain
combined.accept(7);
combined.accept(12);
}
}
This example shows consumer chaining with IntConsumer with Streams
IntConsumer is commonly used with IntStream for processing primitive int values.
The Main.java
package com.zetcode;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
// Create a range of numbers
IntStream numbers = IntStream.rangeClosed(1, 5);
// Define a consumer that processes each number
numbers.forEach(n -> {
System.out.println("Processing: " + n);
System.out.println("Square root: " + Math.sqrt(n));
});
// Another example with method reference
IntStream.of(10, 20, 30).forEach(System.out::println);
}
}
This example demonstrates IntConsumer usage with IntStream. The lambda passed to forEach is an IntConsumer that processes each stream element. Method references can also be used when the operation matches an existing method. Stateful IntConsumerWhile generally discouraged, IntConsumers can maintain state. This example shows a consumer that tracks and reports statistics about the numbers it processes. Main.java
package com.zetcode;
import java.util.function.IntConsumer;
public class Main {
public static void main(String[] args) {
// Stateful consumer that tracks statistics
class StatsConsumer implements IntConsumer {
private int count = 0;
private int sum = 0;
private int min = Integer.MAX_VALUE;
private int max = Integer.MIN_VALUE;
@Override
public void accept(int value) {
count++;
sum += value;
min = Math.min(min, value);
max = Math.max(max, value);
}
public void printStats() {
System.out.println("Count: " + count);
System.out.println("Sum: " + sum);
System.out.println("Min: " + (count > 0 ? min : "N/A"));
System.out.println("Max: " + (count > 0 ? max : "N/A"));
}
}
StatsConsumer stats = new StatsConsumer();
IntStream.of(5, 10, 2, 8, 3).forEach(stats);
stats.printStats();
}
}
This example shows a stateful IntConsumer implementation. The StatsConsumer tracks count, sum, min and max of processed values. While functional, such stateful consumers should be used carefully in parallel streams. IntConsumer in CollectionsIntConsumer can be used with collections containing primitive int values. This example demonstrates processing an int array with a consumer. Main.java
package com.zetcode;
import java.util.Arrays;
import java.util.function.IntConsumer;
public class Main {
public static void main(String[] args) {
int[] temperatures = {22, 25, 19, 30, 17};
// Consumer that checks for extreme temperatures
IntConsumer tempChecker = temp -> {
if (temp > 28) {
System.out.println("Heat warning: " + temp + "°C");
} else if (temp < 20) {
System.out.println("Cold warning: " + temp + "°C");
}
};
// Process all temperatures
Arrays.stream(temperatures).forEach(tempChecker);
// Another example with array modification
int[] squares = new int[temperatures.length];
IntConsumer squareStorer = i -> squares[i] = temperatures[i] * temperatures[i];
for (int i = 0; i < temperatures.length; i++) {
squareStorer.accept(i);
}
System.out.println("Squares: " + Arrays.toString(squares));
}
}
This example shows IntConsumer usage with arrays. The tempChecker analyzes each temperature value. The squareStorer demonstrates how consumers can work with array indices. Consumers provide flexible processing of primitive values. Combining IntConsumer with Other Functional InterfacesIntConsumer can be combined with other functional interfaces like IntPredicate or IntFunction to create more complex processing pipelines. Main.java
package com.zetcode;
import java.util.function.IntConsumer;
import java.util.function.IntPredicate;
public class Main {
public static void main(String[] args) {
// Predicate to check for even numbers
IntPredicate isEven = n -> n % 2 == 0;
// Consumer for even numbers
IntConsumer evenProcessor = n -> System.out.println("Even: " + n);
// Consumer for odd numbers
IntConsumer oddProcessor = n -> System.out.println("Odd: " + n);
// Process numbers with conditional logic
IntStream.range(1, 6).forEach(n -> {
if (isEven.test(n)) {
evenProcessor.accept(n);
} else {
oddProcessor.accept(n);
}
});
// Another example with IntFunction and IntConsumer
java.util.function.IntFunction<String> intToString = Integer::toString;
IntConsumer printHex = n -> System.out.println("Hex: " + Integer.toHexString(n));
IntStream.of(10, 20, 30)
.mapToObj(intToString)
.forEach(s -> System.out.println("String: " + s));
IntStream.of(10, 20, 30).forEach(printHex);
}
}
This example shows IntConsumer working with other functional interfaces. The first part demonstrates conditional processing with IntPredicate. The second part shows integration with IntFunction in a stream pipeline. Such combinations enable powerful data processing patterns. SourceJava IntConsumer Interface Documentation In this article, we've covered the essential methods and features of the Java IntConsumer interface. Understanding these concepts is crucial for efficient processing of primitive int values in functional Java programming. 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 01402520 — 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. |