Groovy中的闭包-在等效Java中实现

Groovy中的闭包-在等效Java中实现,java,groovy,closures,Java,Groovy,Closures,我有以下Groovy脚本: def n = ["1","2","3"] println n.collect { v -> v.toInteger()*2 } 我想把它翻译成等价的Java代码(从“collect”的含义中抽象出来——现在不管它做什么) 我写了以下内容: class X { X() { object[] n = new object[]{"1","2","3"}; object anonymousBlock(object v)

我有以下Groovy脚本:

def n = ["1","2","3"]
println n.collect { v -> v.toInteger()*2 }
我想把它翻译成等价的Java代码(从“collect”的含义中抽象出来——现在不管它做什么)

我写了以下内容:

class X {
   X() {
          object[] n = new object[]{"1","2","3"};

          object anonymousBlock(object v) { return v.toInteger()*2; }

          System.out.println(n.collect(???));
   }
}

使用上面的表示法,我应该传递什么作为参数来收集?

对于Java 8,您可以执行以下操作:

List<String> strings = Arrays.asList( "1","2","3" ) ;
List<Integer> numbers = strings.stream()
                               .map( Integer::parseInt )
                               .map( (i) -> i * 2 )
                               .collect( Collectors.toList() ) ;
然后,我们可以使用以下方法来调用它:

List<String> strings = Arrays.asList( "1","2","3" ) ;

// Create our mapping Iterator
Iterator<Integer> iter = new Collector<>( strings, new Mapper<String,Integer>() {
    @Override
    public Integer apply( String v ) {
        return Integer.parseInt( v ) * 2 ;
    }
} ) ;

// Collect back from iterator into a List
List<Integer> numbers = new ArrayList<>() ;
while( iter.hasNext() ) {
    numbers.add( iter.next() ) ;
}
List strings=Arrays.asList(“1”、“2”、“3”);
//创建映射迭代器
迭代器iter=新收集器(字符串,新映射器(){
@凌驾
公共整数应用(字符串v){
返回整数.parseInt(v)*2;
}
} ) ;
//从迭代器收集回列表
列表编号=新的ArrayList();
while(iter.hasNext()){
add(iter.next());
}

Java 8和Groovy FTW;-)

使用Java 8,您可以执行以下操作:

List<String> strings = Arrays.asList( "1","2","3" ) ;
List<Integer> numbers = strings.stream()
                               .map( Integer::parseInt )
                               .map( (i) -> i * 2 )
                               .collect( Collectors.toList() ) ;
然后,我们可以使用以下方法来调用它:

List<String> strings = Arrays.asList( "1","2","3" ) ;

// Create our mapping Iterator
Iterator<Integer> iter = new Collector<>( strings, new Mapper<String,Integer>() {
    @Override
    public Integer apply( String v ) {
        return Integer.parseInt( v ) * 2 ;
    }
} ) ;

// Collect back from iterator into a List
List<Integer> numbers = new ArrayList<>() ;
while( iter.hasNext() ) {
    numbers.add( iter.next() ) ;
}
List strings=Arrays.asList(“1”、“2”、“3”);
//创建映射迭代器
迭代器iter=新收集器(字符串,新映射器(){
@凌驾
公共整数应用(字符串v){
返回整数.parseInt(v)*2;
}
} ) ;
//从迭代器收集回列表
列表编号=新的ArrayList();
while(iter.hasNext()){
add(iter.next());
}

Java 8和Groovy FTW;-)

Java 8?还是想要Java 7版本?在Java 7中添加了一个有效的方法;-)不过,可能有更好的解决方案;-)Java 8?还是想要Java 7版本?在Java 7中添加了一个有效的方法;-)不过,可能有更好的解决方案;-)