package cn._51doit.com03;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MyListTest {
public static void main(String[] args) {
//函数式变成带来最大的好处就是,逻辑不必根数据绑定在一起
//数据在集合里面了,但是有关逻辑确是单独一个函数
List<String> words= Arrays.asList("Spark", "Hadoop", "Flink", "Hive", "Hbase");
//包装模式
//要想加载里面的元素,就必须先创建对象,然后把元素传进去
MyList mylist = new MyList(words);
//把逻辑传进去,然后,根据逻辑,进行编程
//这是一个逻辑吧原来什么样编程什么样
//在java里面可以传一个接口,输入什么,输出就是什么
//创建一个匿名实现类,把这个匿名实现类传进去
List<String> nlist = mylist.map(new MapFunction() {
public String apply(String word) {
return word.toUpperCase() +"2.0";
}
});
}
}
package cn._51doit.com03;
import java.util.ArrayList;
import java.util.List;
public class MyList {
private List<String> words;
//创建一个构造方法
//此时传进来的数据是原来的数据,因为这些数据要在后面的方法中用,就把这些数据,赋给成员变量,到时候直接调用即可
public MyList(List<String>words) {
this.words = words;
}
//在这里创建一个map方法,然后再另一个类里面传进实参
//这个扩展的map方法也是要写在list里面的 MapFunction 传进去,然后再调用的时候,会传具体的逻辑
public List<String> map(MapFunction func){
//定义一个新的list
List<String> nlist = new ArrayList<>();
//遍历旧的list,将旧的数据应用一下web传过来的函数,得到新的数据,再把新的数据加载到新的list里面
for ( String word : words) {
//应用外部传入的逻辑,得到一个新的单词
String nword = func.apply(word);
nlist.add(nword);
}
//返回新的nlist
return nlist;
}
}
package cn._51doit.com03;
//创建一个接口,然后把这个接口传到MyList里面
public interface MapFunction {
//接口里面有一个方法,方法名可以随意叫,方法里面输入一个字符串,在返回一个string类型的字符串
String apply(String word);
}