Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在函数中应用<;T、 R>;列表中的参数(非列表)_Java_Functional Programming_Java Stream_Functional Interface - Fatal编程技术网

Java 如何在函数中应用<;T、 R>;列表中的参数(非列表)

Java 如何在函数中应用<;T、 R>;列表中的参数(非列表),java,functional-programming,java-stream,functional-interface,Java,Functional Programming,Java Stream,Functional Interface,我有一个方法,它将company作为键返回,将employeer列表作为值返回 映射getUserPerCompany(最终函数转换器)。 该方法接受converter参数,该参数在测试中返回字符串(员工的姓名+姓氏)。它应该返回:Map。我创建了这个实现: 返回getUserStream().collect(toMap(Company::getName,c->converter.apply(c.getUsers())) 错误是: 函数中的应用(domain.User)不能应用于(java.ut

我有一个方法,它将company作为键返回,将employeer列表作为值返回
映射getUserPerCompany(最终函数转换器)
。 该方法接受
converter
参数,该参数在测试中返回字符串(员工的姓名+姓氏)。它应该返回:
Map
。我创建了这个实现:

返回getUserStream().collect(toMap(Company::getName,c->converter.apply(c.getUsers()))

错误是: 函数中的应用(domain.User)不能应用于(java.util.List)

我的问题是,我不知道如何将员工传递到“申请”列表,而不是完整的列表

我的其他尝试:

  • return getUserStream().collect(toMap(Company::getName,c->converter.apply((User)c.getUsers().listIterator())
  • return getUserStream().collect(toMap(Company::getName,c->converter.apply((User)c.getUsers().subList(0,c.getUsers().size())))
  • 返回getUserStream().collect(toMap(Company::getName,c->converter.apply((User)c.getUsers().iterator())

    • 我想这就是你要找的

      <T> Map<String, List<T>> getUserPerCompany(final Function<User, T> converter) {
          return getUserStream().collect(Collectors.toMap(
                  c -> c.getName(),
                  c -> c.getUsers()
                        .stream()
                        .map(converter)
                        .collect(Collectors.toList())
          ));
      }
      
      Map getUserPerCompany(最终函数转换器){
      返回getUserStream().collect(Collectors.toMap(
      c->c.getName(),
      c->c.getUsers()
      .stream()
      .map(转换器)
      .collect(收集器.toList())
      ));
      }
      
      用法示例是

      final Map<String, List<String>> users = getUserPerCompany(user -> user.getName() + " " + user.getSurname());
      
      final-Map-users=getUserPerCompany(user->user.getName()+“”+user.getName());
      

      基本上,您需要映射每个
      用户
      ,应用输入
      功能

      您可以使用
      收集器。groupingBy()
      并编写自定义
      收集器

      <T> Map<String, List<T>> getUserPerCompany(final Function<User, T> converter) {
          return getUserStream().collect(
                  Collectors.groupingBy(
                          c -> c.getName(),
                          Collector.of(
                                  ArrayList::new,                  //init accumulator
                                  (list, c)-> c.getUsers()         //processing each element
                                               .stream()
                                               .map(converter)
                                               .forEach(list::add),
                                  (result1, result2) -> {          //confluence 2 accumulators 
                                      result1.addAll(result2);     //in parallel execution
                                      return result1;
                                  }
                          )
                  )
          ); 
      }
      
      Map getUserPerCompany(最终函数转换器){
      返回getUserStream().collect(
      收集者分组(
      c->c.getName(),
      收藏(
      ArrayList::新建,//初始化累加器
      (list,c)->c.getUsers()//处理每个元素
      .stream()
      .map(转换器)
      .forEach(列表::添加),
      (结果1,结果2)->{//汇流2累加器
      result1.addAll(result2);//并行执行
      返回结果1;
      }
      )
      )
      ); 
      }
      
      请不要阅读问题,但首先n“来自列表(非列表)”的标题不清楚。非常感谢!我刚刚将
      getUserStream()
      替换为
      getCompanyStream()
      (公司包含用户),但这些是我的内部方法,不在这里。再次感谢您提供的解决方案,它有效且清晰。
      Stream
      低于
      fori
      foreach
      =>替换它使用
      for