---
title: 'Blöcke mit Code und die funktionale Schnittstelle java.util.function.Consumer'
url: 'https://www.tutego.de/blog/javainsel/2013/05/blcke-mit-code-und-die-funktionale-schnittstelle-java-util-function-consumer'
markdown: 'https://www.tutego.de/blog/javainsel/2013/05/blcke-mit-code-und-die-funktionale-schnittstelle-java-util-function-consumer.md'
date: '2013-05-30'
description: 'Anweisungen von Code lassen sich in eine Methode eines Objekts setzen und auf diese Weise weitergeben. Das ist eine häufige Notwendigkeit, für die das Paket java.util.function eine einfache funktionale Schnittstelle Consumer vorgibt: interface java.util.function.Consumer<T> * void accept(T t)…'
taxonomy:
  category:
    - Insel
    - 'Java 8'
---

# Blöcke mit Code und die funktionale Schnittstelle java.util.function.Consumer

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

## Blöcke mit Code und die funktionale Schnittstelle java.util.function.Consumer

30.05.2013 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

Anweisungen von Code lassen sich in eine Methode eines Objekts setzen und auf diese Weise weitergeben. Das ist eine häufige Notwendigkeit, für die das Paket `java.util.function` eine einfache funktionale Schnittstelle `Consumer` vorgibt:

```
interface java.util.function.Consumer<T>
```

\* void `accept(T t)`. Führt Operationen mit der Übergabe t durch.

Die `accept(…)`-Methode bekommt ein Argument – wobei die Implementierung natürlich nicht zwingend darauf zurückgreifen muss – und liefert keine Rückgabe. Transformationen sind damit nicht möglich, denn nur über Umwege kann der Konsument die Ergebnisse speichern, und dafür ist die Schnittstelle nicht gedacht. `Consumer`-Typen sind eher gedacht als Endglied einer Kette, in der zum Beispiel Dateien in eine Datei geschrieben werden, die vorher verarbeitet wurden.

Immer repräsentieren Konsumenten Code, und eine API kann nun einfach einen Code-Block nach der Art `doSomethingWith(myConsumer)` annehmen, und ihn etwa in einem Hintergrund-`Thread` abzuarbeiten, wiederholend auszuführen, nach einer erlaubten Maximaldauer abbrechen, die Zeit messen, …

**Beispiel**

Implementiere einen `Consumer`-Wrapper, der die Ausführungszeit eines anderen Konsumenten loggt.

```java
import java.util.function.*;

import java.util.logging.Logger;

class Consumers {

public static <T> Consumer<T> measuringConsumer( Consumer<T> block ) {

return t -> {

long start = System.nanoTime();

block.accept( t );

long duration = System.nanoTime() – start;

Logger.getAnonymousLogger().info( "Ausführungszeit (ms): " + duration );

};

}

}
```

Folgender Aufruf zeigt die Nutzung:

```java
Consumer<Void> wrap = measuringConsumer( (Void) -> System.out.println( "Test" ) );

wrap.accept( null );
```

**Typ `Consumer` in der API**

In der Java-API zeigt sich der Typ `Consumer` in der Regel als Argument einer Methode `forEach(Consumer)`, die Datenquellen abläuft und für jedes Element `accept(…)` aufruft. Interessant ist die Methode an dem Typ `Iterable`, denn die wichtigen `Collection`-Datenstrukturen wie `ArrayList` implementieren diese Schnittstelle.

**Beispiel**

Gib jedes Element einer Liste auf der Konsole aus:

```java
Arrays.asList(1, 2, 3, 4).forEach( t -> System.out.println( t ) );
```

Kategorien: [Insel](https://www.tutego.de/blog/javainsel/category/insel/), [Java 8](https://www.tutego.de/blog/javainsel/category/java-8/)

## 2 Kommentare

**Christian Ullenboom** · [28.05.2014 22:36](#comment-20611) · [Antwort auf einen Kommentar](#comment-13895)

Java 8 ist schon lange in Entwicklung, daher weiß man schon relativ gut, wie sich das anfühlen kann. Die beiden Java-Bücher gehen ausführlich auf Java 8 ein, auch die Blog-Posts hier.

**Leser** · [04.05.2014 17:08](#comment-13895)

Ich finde das sehr schön. Ich habe das nicht verstanden. Vielen Dank. Wo kann man Java8 lernen? Viele Autoren loben Java8 in den Himmel schon vorm Erscheinen als hätten sie jahrelang darauf gewartet. Haben diese Leute schon so große Anwendungen damit geschrieben?

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Thema der Woche: REST-Endpoint-Design](https://www.tutego.de/blog/javainsel/2013/05/thema-der-woche-rest-endpoint-design.md)
- Next: [Java und Unendlich](https://www.tutego.de/blog/javainsel/2013/05/java-und-unendlich.md)
