将array_walk从php转换为java方法

时间:2017-09-26 11:36:20

标签: java php arrays iteration java-stream

这样的PHP中有一个函数

function array_walk(array &$array, callable $callback, $userdata = null): bool {}

我想在Java中使用此方法。任何人都可以帮助我吗?

例如,我想将此函数转换为Java

array_walk($result, function (&$value, $key) {
    $value = sprintf('%s/%s', $key, $value);
});

1 个答案:

答案 0 :(得分:3)

我已经在W3C搜索了这个方法做了什么,我可以清楚地说,为此目的,Java 8 Stream API使用forEach()代替:

String[] a = {"blue", "red"};
Stream.of(a).forEach(i -> System.out.println("This is a " + i + " color."));

结果:

This is a blue color.
This is a red color.

您还可以使用@FunctionalInterface实现您想要的功能。但是你不能使用它,因为你被困在Java 7及更早版本中。在这种情况下,您必须使用普通的for-loop或自己的类和@Override实现:

public class ArrayWalker<T> {

    T[] t;

    public ArrayWalker(T[] t) {
        this.t = t; 
    }

    public void function(T t) {}

    public ArrayWalker<T> walk() {
        for (int i=0; i<t.length; i++) {
            function(t[i]);
        }
        return this;
    }
}

用法:

new ArrayWalker<String>(array) {
    @Override
    public void function(String str) {
        System.out.println("This is a " + str + " color.");
    }
}.walk();

它将产生与上例相同的输出。