java 8

挖一个java8的坑,用一些填一些

java.util.function中的常用接口

  • Predicate – 传入一个参数,返回一个bool结果, 方法为boolean test(T t)
  • Consumer – 传入一个参数,无返回值,纯消费。 方法为void accept(T t)
  • Function – 传入一个参数,返回一个结果,方法为R apply(T t)
  • Supplier – 无参数传入,返回一个结果,方法为T get()
  • UnaryOperator – 一元操作符, 继承Function,传入参数的类型和返回类型相同。
  • BinaryOperator – 二元操作符, 传入的两个参数的类型和返回类型相同, 继承BiFunction

一个经得起折腾的实体类

public class Person {
	private String name;
	private int age;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	@Override
	public String toString() {
		return "Person{" +
				"name='" + name + '\'' +
				", age=" + age +
				'}';
	}
}

调用类

public class FunctionApp {
	public static void main(String[] args) {
		PersonFactory<Person> personPersonFactory = Person::new;
		Person jack = personPersonFactory.create("jack", 30);
		Person tom = personPersonFactory.create("tom", 20);

		Predicate<Person> personAgePredicate = person -> person.getAge() > 25;
		Consumer<Person> personConsumer = person -> person.setName("Big " + person.getName());

		Function<Person, Person> transformNameByAge = person -> {
			if (personAgePredicate.test(person)) {
				personConsumer.accept(person);
			}
			return person;
		};

		Consumer<Object> print = FunctionApp::showString;
		print.accept(transformNameByAge.apply(jack));
		print.accept(transformNameByAge.apply(tom));
	}

	public static void showString(Object object) {
		System.out.println(object.toString());
	}
}

结果


Person{name='Big jack', age=30}
Person{name='tom', age=20}

Amazing!! factory-kit

这是一个简单工厂的实现,应用jdk8的一些语法只能用惊艳形容,其中WeaponFactory接口中的静态方法为什么能返回一个return name -> map.get(name).get();,困扰我很久,回头写线程代码时,突然意识到这部分可以转换为:

return new WeaponFactory() {
	@Override
	public Weapon create(WeaponType name) {
		return map.get(name).get();
	}
};

一个匿名类。

为了结构更加整洁Builder这个接口也被抽象出来,每次调用时会应用到Map<WeaponType, Supplier>.put上。返回的匿名类中使用到了上线文的内容`map`,map这里其实是隐形的final类型