代码之家  ›  专栏  ›  技术社区  ›  Giacomo Brunetta

Java 8中与Lambda的一元函数接口

  •  2
  • Giacomo Brunetta  · 技术社区  · 8 年前

    我在学习Java 8 Lambda和一元函数接口。我有一个关于“函数”课的练习作业,作业内容如下:
    1) 创建一个名为“main function”的测试方法
    2) 创建一个函数变量并将其称为“setToList”
    3) 分配给setToList一个lambda表达式,在该表达式中获取一个集合并创建一个Arraylist,然后添加集合中的所有元素
    4) 创建一个哈希集并添加以下世界:“再见”、“你好”、“你好”、“你好”
    5) 调用lamda表达式并查看结果

    我试着用下面的方法,但不起作用。尤其是,我认为我错了这一步。我需要了解如何迈出这一步

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    import java.util.function.Function;
    
    public class FunctionTest {
    
        public static void main(String[] args) {
    
            Function<Set, List> setToList = s -> new ArrayList<Set>();
            HashSet<String> hs = new HashSet<String>();
            hs.add("ciao");
            hs.add("hello");
            hs.add("hallo");
            hs.add("bonjour");
            System.out.println(setToList.apply(hs));
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Eugene    8 年前

    你必须给它下一个不同的定义:

    Function<Set<String>, List<String>> setToList = s -> new ArrayList<String>(s);
    

    或者最好使用方法参考:

    Function<Set<String>, List<String>> setToList = ArrayList::new;
    

    不要使用原始类型,使用 ArrayList 接受 Collection 作为输入