我在数据结构中有一个方法,我希望用它来传递各种收集器并将它们应用到我的对象中。
以下是方法 - >
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;
}
上述方法主要采用&#34;键&#34;以及它应用于按键获得的值的收集器。
这就是我使用它的方式 - &gt;
Collector stringToListCollector =
Collectors.toList();
List<String> values =
myObject.applyCollector("key",
stringToListCollector);
这适用于简单的事情,例如计算,平均等等。
但是,如果我希望发送更复杂的东西,比如嵌套收集器,该怎么办? 例如,说我的&#34;键&#34;返回一个String,实际上是一个IP甚至是一个整数。
我想要做的是发送一个收集器,首先通过执行&#34; integer :: parseInt&#34;将我的字符串转换为整数。然后执行toList。
现在我必须先检索一个名为values的列表(如上所述)。然后执行values.stream().Map(Integer::ParseString).collect(Collectors::averagingInt).
我可能需要多次执行此操作,我有两个选择。
将ToList,Map和Collect作为一个函数。并称之为。这个 打败了我的lambda。
编写或嵌套现有收藏家,直接为我做。这个 选项看起来更整洁,因为如果我能正确地做到这一点,我就会 能够在One Pass中完成所有任务而不是2次传球 我现在,以及可能保存我需要先创建的内存 列表
我该怎么做?写一个收集器 - &gt;
答案 0 :(得分:1)
对于您的示例,它看起来像
</head>
<body>
<div id='header'>
<h2>Welcome to Lingo!</h2>
</div>
<div id='game area'>
<form action="" method="get">
<input type="text" value="" id="textfield"></input>
<div id="select_div"><a href="#" id="select_link">Test</a></div>
</form>
</div>
<script type="text/javascript">
$(document).ready(function(){
$('#select_div').click(function(e){
$.get('http://localhost:3001',function(res){
alert("Worked");
});
});
});
</script>
</body>
</html>
收藏家可以在某种程度上组成:
applyCollector("key", mapping(Integer::parseInt, averagingInt(i -> i))
在收集Collectors.mapping
收集后执行功能另外一些收藏家接受下游收藏家,即Collectors.collectingAndThen