Java-8-Consumer
interface Consumer
Consumer的作用顾名思义,是给定义一个参数,对其进行(消费)处理,处理的方式可以是任意操作
源码:
public interface Consumer<T> {
//对给定的参数T执行定义的操作
void accept(T t);
//对给定的参数T执行定义的操作执行再继续执行after定义的操作
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
简单例子
public class M1 {
public static void main(String[] args) {
Consumer<String> consumer1 = s -> System.out.println(s.length());
consumer1.accept("abc");
System.out.println("----------------------");
Consumer<Integer> consumer2 = integer -> System.out.println(integer);
consumer2.accept(4545);
System.out.println("----------------------");
Consumer<String> consumer3 = s -> System.out.println(s);
Consumer<String> consumer4 = s -> System.out.println(s.toUpperCase());
//先执行consumer3 再执行consumer4
consumer3.andThen(consumer4).accept("jhdhhfdhuhhd");
System.out.println("----------------------");
Consumer<Integer> consumer5 = integer ->
{
if (integer > 50){
System.out.println(integer);
}
};
List<Integer> integers = Create_Data.supply_Integers();
integers.stream()
.forEach(consumer5);
System.out.println("----------------------");
List<Person> personList = Create_Data.supply_Persons();
Consumer<Person> consumer6 = person ->
{
if (person.getAge() > 15) {
System.out.println(person);
}
};
personList.stream()
.forEach(consumer6);
}
}
针对特定类型
DoubleConsumer IntConsumer LongConsumer
public class M1 {
public static void main(String[] args) {
DoubleConsumer consumer1 = d -> System.out.println(d);
consumer1.accept(454.002);
System.out.println("-------------------------");
IntConsumer consumer2 = i ->
{
if (i > 10){
System.out.println(i);
}
};
List<Integer> integers = Create_Data.supply_Integers();
for (int i : integers){
consumer2.accept(i);
}
System.out.println("-------------------------");
LongConsumer consumer3 = l -> System.out.println(l);
consumer3.accept(15L);
}
}
ObjIntConsumer ObjDoubleConsumer ObjLongConsumer
例子:
public class M2 {
public static void main(String[] args) {
ObjIntConsumer<Person> personObjIntConsumer = (person,integer) ->
{
if (person.getAge() > integer){
System.out.println(person);
}
};
List<Person> personList = Create_Data.supply_Persons();
for (Person person:personList){
personObjIntConsumer.accept(person,55);
}
}
}
两个参数
BiConsumer<T, U>
public class M3 {
public static void main(String[] args) {
BiConsumer<String,Integer> biConsumer = (s,i) ->
{
if (s.length() > 2 && i > 60){
System.out.println("OK");
}
};
List<Person> personList = Create_Data.supply_Persons();
for (Person person : personList){
biConsumer.accept(person.getName(),person.getAge());
}
System.out.println("-----------------------");
BiConsumer<Person,String> biConsumer2 = (p,s) ->
{
if (p.getOrigin().equals("Shanghai")){
System.out.println(s);
}
};
for (Person person : personList) {
biConsumer2.accept(person,"来自上海的群众");
}
}
}
实现自己的Consumer
@FunctionalInterface
public interface MyConsumer<T,R,U> {
void accept(T t,R r,U u);
}
public class M1{
public static void main(String[] args) {
MyConsumer<Person,Integer,String> myConsumer = (person,integer,string) ->
{
if (person.getAge() > integer) {
System.out.println(string);
System.out.println(person);
System.out.println("");
}
};
List<Person> personList = Create_Data.supply_Persons();
for (Person person : personList) {
myConsumer.accept(person,50,"年纪大于50的人");
}
}
}