Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 函数访问外部变量_Java_Callback_Guava_Final - Fatal编程技术网

Java 函数访问外部变量

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(…,函数回调){ ... 用于(项目:数据){ 回调。应用(项); } } 使用此函数,我希望传

我有一个函数,它迭代一个繁重的数据集,接收回调(Google的Guava函数),并对数据集的每一项运行回调:

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,它被描述为对输入对象的操作。该操作可能会修改该对象或外部状态(其他对象),而不是奇怪的
函数