Filtrování v Java 8

Java 8 představila streamy a ty mají metodu filter, která má jako parametr predikát (funkce vracejítí pravdu nebo nepravdu). V následujícím příkladu se z původního seznamu vytvoří nový seznam, který bude obsahovat pouze objekty se statusem OPEN.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class App {

	public static void main(String[] args) {
		List<MyObject> list = Arrays.asList(
				new MyObject(Status.CLOSED.getId(), "AAA"),
				new MyObject(Status.OPEN.getId(), "BBB"),
				new MyObject(Status.OPEN.getId(), "CCC"),
				new MyObject(Status.CLOSED.getId(), "DDD"),
				new MyObject(Status.OPEN.getId(), "EEE")
		);

		List<MyObject> open = list.stream()
			.filter(myObject -> myObject.getStatus() == Status.OPEN.id)
			.collect(Collectors.toList());

		open.forEach(openObject -> System.out.println(openObject.getName()));
	}

	private enum Status {
		OPEN(1L), CLOSED(2L);

		private long id;

		private Status(long id) {
			this.id = id;
		}

		public long getId() {
			return id;
		}
	}
}
 class MyObject {

	private long status;
	private String name;

	public MyObject(long status, String name) {
		this.status = status;
		this.name = name;
	}

	public long getStatus() {
		return status;
	}

	public void setStatus(long status) {
		this.status = status;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

Výsledek:

BBB
CCC
EEE

Napsat komentář