Java 函数访问外部变量
我有一个函数,它迭代一个繁重的数据集,接收回调(Google的Guava函数),并对数据集的每一项运行回调:Java 函数访问外部变量,java,callback,guava,final,Java,Callback,Guava,Final,我有一个函数,它迭代一个繁重的数据集,接收回调(Google的Guava函数),并对数据集的每一项运行回调: void processData(..., Function<Item, Void> callback) { ... for (Item item : data) { callback.apply(item); } } void processData(…,函数回调){ ... 用于(项目:数据){ 回调。应用(项); } } 使用此函数,我希望传
void processData(..., Function<Item, Void> callback) {
...
for (Item item : data) {
callback.apply(item);
}
}
void processData(…,函数回调){
...
用于(项目:数据){
回调。应用(项);
}
}
使用此函数,我希望传递一个回调,将所有项目添加到列表或映射:
List<Item> itemList;
processData(..., new Function<Item, Void)() {
@Override public void apply(Item item) {
itemList.add(item);
}
});
列表项列表;
processData(…,new Function如果在如下声明期间创建实例,则可以使用final:
final List<Item> itemList = new ArrayLis<Item>();
processData(..., new Function<Item, Void)() {
@Override public void apply(Item item) {
itemList.add(item);
}
});
final List itemList=new ArrayLis();
processData(…,new Function如果在如下声明期间创建实例,则可以使用final:
final List<Item> itemList = new ArrayLis<Item>();
processData(..., new Function<Item, Void)() {
@Override public void apply(Item item) {
itemList.add(item);
}
});
final List itemList=new ArrayLis();
processData(…,新函数您似乎对final关键字的理解不正确。此语句:
final List<Item> itemList = new ArrayList<Item> ();
在最终列表中完全有效。不允许写:
itemList = someOtherItemList; //forbidden, itemList is final
您似乎对final关键字的理解不正确。此语句:
final List<Item> itemList = new ArrayList<Item> ();
在最终列表中完全有效。不允许写:
itemList = someOtherItemList; //forbidden, itemList is final
由于您需要的是一个列表
,而输入也是一个列表
,因此我认为列表。在您的情况下,转换是一个选择:
List<Item> itemList = Lists.transform(fromList, new Function<Item, Item>(){
@Override public Item apply(Item input) {
...
return transformedItem;
}});
List itemList=Lists.transform(fromList,new Function()){
@覆盖公共项应用(项输入){
...
返回transformedItem;
}});
由于您需要的是一个列表
,而输入也是一个列表
,因此我认为列表。在您的情况下,转换是一个选择:
List<Item> itemList = Lists.transform(fromList, new Function<Item, Item>(){
@Override public Item apply(Item input) {
...
return transformedItem;
}});
List itemList=Lists.transform(fromList,new Function()){
@覆盖公共项应用(项输入){
...
返回transformedItem;
}});
既然您使用的是番石榴,如果您确实想要一个不可变列表,为什么不使用不可变列表
?它还实现了列表
接口。函数(理论上)不应该有副作用,我会使用自定义的“函数接口”例如,Java8被描述为对输入对象的操作。该操作可能会修改该对象或外部状态(其他对象),而不是奇怪的函数
。既然您使用的是番石榴,如果您想要一个不可变列表,为什么不使用不可变列表
?它还实现了列表
接口。函数(理论上)应该没有副作用,我会使用一个自定义的“功能接口”,例如Java8,它被描述为对输入对象的操作。该操作可能会修改该对象或外部状态(其他对象),而不是奇怪的函数。