1、expressionパラメータのリスト - >機能が実行します
フォーマット1:パラメータなし戻り値なし
フォーマット2:1つのパラメータ、戻り値のない、あなたは括弧を書き込むことはできません
フォーマット3:2つの以上のパラメータがあり、戻り値、複数の文でラムダ
フォーマット4:二つ以上のパラメータ、戻り値がありますが、ラムダは一つだけの文で、あなたは括弧とリターンを書き込むことはできません
フォーマット5:データ型のラムダ式パラメータリストを省略することができ、JVMは、文脈から推測することができる、すなわち「型推論」
概要
上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省
2、ラムダ式は、の「関数インタフェース」をサポートする必要があります
「機能インタフェース」に定義されます
1つのインターフェイスだけ抽象インタフェース・メソッド
3、Java(登録商標)8が内蔵4つのコア機能インタフェース
消費:消費者インタフェース
void accept(T t);
// case:消费
@Test
public void test2() {
consumerMoney(1000d, (m) -> System.out.println("消费" + m + "元"));
}
private static void consumerMoney(Double money, Consumer<Double> consumer) {
consumer.accept(money);
}
サプライヤー:供給インタフェース
T get();
// case:生成指定个数的整数放入集合中
@Test
public void test3() {
List<Integer> numList = getNumList(10, () ->(Math.random() * 100));
for (Integer num : numList) {
System.out.println(num);
}
}
private static List<Integer> getNumList(int num, Supplier<Double> supplier) {
List<Integer> numList = Lists.newArrayList();
for (int i = 0; i < num; i++) {
numList.add(supplier.get().intValue());
}
return numList;
}
機能<T、R>:関数インタフェース
R apply(T t);
// case:处理字符串
@Test
public void test4() {
String s = filterStr("\b\b 函数型接口 ", str -> str.trim());
System.out.println(s);
}
private static String filterStr(String oldStr, Function<String, String> function) {
return function.apply(oldStr);
}
述語:アサーションインタフェース
boolean test(T t);
// case:将满足条件的字符串放入集合中
@Test
public void test5() {
List<String> oldStrList = Arrays.asList("aaa", "bbbb", "cc", "dd", "e");
List<String> newStrList = putStrToList(oldStrList, x -> x.length() < 3);
for (String s : newStrList) {
System.out.println(s);
}
}
private static List<String> putStrToList(List<String> oldStrList, Predicate<String> predicate) {
List<String> newStrList = Lists.newArrayList();
for (String str : oldStrList) {
if (predicate.test(str)) {
newStrList.add(str);
}
}
return newStrList;
}
4、参照方法
定義:コンテンツラムダ本体は方法を実現しています
フォーマット1:メソッド名のオブジェクト::例
フォーマット2:クラスの静的メソッド名::
フォーマット3:メソッドのクラス名の例::
注意事項:ラムダ本体は、メソッドのパラメータリストと呼ばれ、抽象メソッドの戻り値の型と一貫性の関数インタフェースに機能リストの型を返します
図5に示すように、基準コンストラクタ
フォーマット:クラス名::新しいです
注意事項:パラメータリストのコンストラクタは、抽象メソッドのインタフェース機能パラメータリストと一致するために呼び出される必要があります
6、配列参照
フォーマット:タイプ::新しいです
@Test
public void test6() {
// 对象::实例方法名
Consumer consumer = (x) -> System.out.println(x);
Consumer consumer1 = System.out::println;
consumer1.accept("bbb");
// 类::静态方法名
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
Comparator<Integer> com1 = Integer::compare;
int result = com1.compare(1, 2);
System.out.println(result);
// 类::实例方法名
BiPredicate<String, String> biPredicate = (x, y) -> x.equals(y);
BiPredicate<String, String> biPredicate1 = String::equals;
boolean test = biPredicate1.test("b", "b");
System.out.println(test);
// 无参构造器引用
Supplier<Item> supplier = () -> new Item();
Supplier<Item> supplier1 = Item::new;
System.out.println(JSON.toJSONString(supplier1));
// 一个参数构造器引用
Function<Long, Item> supplier2 = Item::new;
// 数组引用
Function<Integer, String[]> fun = (x) -> new String[x];
Function<Integer, String[]> fun1 = String[]::new;
String[] strings = fun.apply(10);
System.out.println(strings.length);
}
項目オブジェクト
public class Item {
/**
* 商品编号
*/
public Long numId;
/**
* 商品名称
*/
public String title;
/**
* 商品销量
*/
public Long volume;
/**
* 商品的库存
*/
public Long num;
/**
* 商品价格
*/
public Double price;
public Item() {
}
public Item(Long numId) {
this.numId = numId;
}
public Item(Long numId, String title, Long volume, Long num, Double price) {
this.numId = numId;
this.title = title;
this.volume = volume;
this.num = num;
this.price = price;
}
public Long getNumId() {
return numId;
}
public void setNumId(Long numId) {
this.numId = numId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Long getVolume() {
return volume;
}
public void setVolume(Long volume) {
this.volume = volume;
}
public Long getNum() {
return num;
}
public void setNum(Long num) {
this.num = num;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Item{" +
"numId=" + numId +
", title='" + title + '\'' +
", volume=" + volume +
", num=" + num +
", price=" + price +
'}';
}
}