编写一个收集器或嵌套现有的
Write a Collector or nest existing ones
我在数据结构中有一个方法,我希望用它来传递各种收集器并将它们应用于我的对象。
方法如下-->
public <R> R applyCollector(String key, Collector a)
{
this.key = key;
this.a = a;
R result = (R) this.stateList.stream().
map(state -> state.getKey(key)).collect(a);
return result;
}
上面的方法基本上接受了一个 "key" 和一个收集器,它应用于通过键获得的值。
我就是这样使用的 -->
Collector stringToListCollector =
Collectors.toList();
List<String> values =
myObject.applyCollector("key",
stringToListCollector);
这适用于简单的事情,例如获取计数、平均值等。
但是,如果我想发送更复杂的东西,比如嵌套收集器,该怎么办。
比如说我的"key"returns我是一个String,其实就是一个IP甚至是一个Integer。
我想做的是发送一个收集器,它首先通过执行 "integer::parseInt" 然后执行 toList 将我的字符串转换为整数。
现在我必须首先检索一个名为值的列表(上面定义)。然后做一个values.stream().Map(Integer::ParseString).collect(Collectors::averagingInt).
我可能需要多次执行此操作,我有两个选择。
将 ToList 和 Map and Collect 作为一个函数。并调用它。这个
超出了我使用 lambda 的目的。
编写或嵌套现有的收集器来直接为我做这件事。这个
选项对我来说看起来更整洁,因为如果我能正确地做到这一点,我会
能够在一次通行证中完成所有事情,而不是需要 2 次通行证
我现在,也许还可以保存我首先创建一个所需的内存
列表.
我该怎么做?写一个 Collector 做 -->
- 获取一个对象,并在其上运行 Integer::ParseInt 然后执行一个
平均操作。
对于您的示例,它看起来像
applyCollector("key", mapping(Integer::parseInt, averagingInt(i -> i))
收藏家可以在一定程度上组成:
Collectors.mapping
收集前执行函数
Collectors.collectingAndThen
收集后执行函数
另外一些收集器接受下游收集器,即 groupingBy
我在数据结构中有一个方法,我希望用它来传递各种收集器并将它们应用于我的对象。
方法如下-->
public <R> R applyCollector(String key, Collector a)
{
this.key = key;
this.a = a;
R result = (R) this.stateList.stream().
map(state -> state.getKey(key)).collect(a);
return result;
}
上面的方法基本上接受了一个 "key" 和一个收集器,它应用于通过键获得的值。
我就是这样使用的 -->
Collector stringToListCollector =
Collectors.toList();
List<String> values =
myObject.applyCollector("key",
stringToListCollector);
这适用于简单的事情,例如获取计数、平均值等。
但是,如果我想发送更复杂的东西,比如嵌套收集器,该怎么办。 比如说我的"key"returns我是一个String,其实就是一个IP甚至是一个Integer。
我想做的是发送一个收集器,它首先通过执行 "integer::parseInt" 然后执行 toList 将我的字符串转换为整数。
现在我必须首先检索一个名为值的列表(上面定义)。然后做一个values.stream().Map(Integer::ParseString).collect(Collectors::averagingInt).
我可能需要多次执行此操作,我有两个选择。
将 ToList 和 Map and Collect 作为一个函数。并调用它。这个 超出了我使用 lambda 的目的。
编写或嵌套现有的收集器来直接为我做这件事。这个 选项对我来说看起来更整洁,因为如果我能正确地做到这一点,我会 能够在一次通行证中完成所有事情,而不是需要 2 次通行证 我现在,也许还可以保存我首先创建一个所需的内存 列表.
我该怎么做?写一个 Collector 做 -->
- 获取一个对象,并在其上运行 Integer::ParseInt 然后执行一个 平均操作。
对于您的示例,它看起来像
applyCollector("key", mapping(Integer::parseInt, averagingInt(i -> i))
收藏家可以在一定程度上组成:
Collectors.mapping
收集前执行函数Collectors.collectingAndThen
收集后执行函数
另外一些收集器接受下游收集器,即 groupingBy