!!!免責事項:この記事は個人的な学習体験であり、実際の状況を表すものではありません。エラーがある場合、
機能インターフェイスには主に次のインターフェイスとその他の派生インターフェイスが含まれていることを指摘してください。
1.Consumer<T> 代表了接受一个输入参数T并且无返回的操作
2.Function<T,R>接收一个参数T,返回R
3.Predicate<T>接收一个参数T返回一个boolean类型的值
4.Supplier<T>无参数
この記事では主に最初の3つの
学習関数式について説明します。次の知識ポイントを習得するのが最善
です。問題ではありませんが、学習はより困難です
。1.java1.8のデフォルト変更のデフォルトメソッド2.ラムダ式中
のJava 1.8 3. java1。8つのメソッドリファレンス
1.消費者<T>
Javaソースコード:Iterableインターフェースのデフォルトのメソッドforeachパラメーターはコンシューマータイプ
コード001です。
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
呼び出し方法は次のとおりです。
コード002
List<User> userList=new ArrayList<>();//数据省略不写
//1.普通for循环
for(int i=0;i<userList.size();i++){
System.out.println(userList.get(i).getName());
}
//2.foreach
for(User user:userList){
System.out.println(userList.get(i).getName());
}
//3.重点:最复杂,新手最易懂的方式
userList.forEach(user->{
System.out.println(user.getName());
});
//4.函数式参数只有一句代码时可以简化去掉大括号,去掉分号
userList.forEach(user -> System.out.println(user.getName()));
ループ分析の
コードトップ001ソースによるすべての方法で一貫した印刷結果を示すコードはaction.accept(t)を示します。パラメーターはユーザーのコード002であり、ユーザー名は簡単に再生でき、002コード関数コードリファレンス、システムに対応します。 out.println(user.getName())は関数型パラメーターです。他の場所の変数は、関数型パラメーターのコードブロックで参照できます(注!引用する場合、コードブロック外のすべての変数は最終変更と同等です) 、次のように:直接割り当てはエラーをコンパイルします!テストコードは次のとおりです。
public static void main(String[] args) {
User user=new User(1,"Jack");
test1(user,u->{
System.out.println("我的朋友是:"+u.getName());
});
test1(user,u->{
System.out.println("我的哥哥是:"+u.getName());
});
}
public static void test1(User user,Consumer<? super User> consumer){
System.out.println("----这里是大量逻辑代码1");
consumer.accept(user);
System.out.println("----这里是大量逻辑代码2");
}
演算結果:
2.機能<T、R>
関数の戻り値はConsumerより1つ多く、
テストコードは次のとおりです。
public static void main(String[] args) {
callTest2();
}
public static void callTest2(){
List<User> userList=new ArrayList(){
{
add(new User(11,"Jack"));
add(new User(12,"zhangsan"));
add(new User(23,"lisi"));
add(new User(34,"wangwu"));
}};
test2(userList,user -> {
if(user.getAge()<18){
return "未成年";
}
return "已经成年";
});
}
public static void test2(List<User> list, Function<? super User,? extends String> function){
System.out.println("----这里是大量逻辑代码1");
list.forEach(user->{
System.out.println(user.getName()+":"+function.apply(user));
});
System.out.println("----这里是大量逻辑代码2");
}
運用結果:
継続