PHPでは、次のことができますforeach($array as $key=>$value){//codes
。Javaで関数を作成して実行することは可能foreach(arr,function(key,value){//codes});
ですか?
私はJavaがあまり得意ではありません。関数が機能するには、すべてのデータ型を受け入れる必要があります。また、コールバック関数が Java で使用できるかどうかもわかりません。
PS「不可能」は有効な答えです、ありがとう!
PHPでは、次のことができますforeach($array as $key=>$value){//codes
。Javaで関数を作成して実行することは可能foreach(arr,function(key,value){//codes});
ですか?
私はJavaがあまり得意ではありません。関数が機能するには、すべてのデータ型を受け入れる必要があります。また、コールバック関数が Java で使用できるかどうかもわかりません。
PS「不可能」は有効な答えです、ありがとう!
他の回答では、「拡張 for ループ」構文がどのように機能するかが説明されています。そして、それはあなたが必要としているものかもしれません。
しかし、あなたが実際に尋ねた質問に答えたいと思います:
Javaで関数を作成して行うことは可能ですか:
foreach(arr,function(key,value){//codes});
書かれているように、これは別の関数をパラメーターとして受け取る関数 (またはメソッド) になります。これは、現在定義されている Java では不可能です。Java では、関数 (またはメソッド) をファースト クラス オブジェクトとして扱うことはできません。引数として渡すことはできません。(現在の) Java で得られる最も近い方法は、次のFunction
ようなインターフェイスを作成することです。
public interface Function {
public void fun(Object arg1, Object arg2);
}
次のように使用します。
Object[] arr = ...
foreach (arr, new Function() {
public void fun (Object key, Object value) {
// do stuff
}});
(私は、PHP 配列が Java 配列というよりも Java HashMap に似ているという事実を無視しています。これは、この種のものを実装する方法に影響します...しかし、それは私がしようとしている要点から逸れています. )
将来のある時点で、Java は拡張されて、ファーストクラスの関数 / クロージャー / ラムダなどをサポートする予定です。しばらくの間、この機能は Java 7 向けに予定されていましたが、Java 7 を完成させるために延期する必要がありました。
更新- ラムダのサポートがJava 8になることが明らかになりました。この新機能は、初期リリースのダウンロードに含まれていました。
はい、できます:
List<String> ls = new ArrayList();
ls.add("Hello");
ls.add("world");
//your foreach sentence
for(String s : ls) {
System.out.println(s);
}
これは別のクラスでも機能します。
アップデート
リスト (配列またはリンクされたリスト) をトラバースすると、インデックスがインデックスになります。インデックスを保持するには、別の整数を使用する必要があります。
List<String> ls = new ArrayList();
ls.add("Hello");
ls.add("world");
//your foreach sentence
int index = 0;
for(String s : ls) {
System.out.println("index: " + index);
System.out.println(s);
//put your logic here...
//at the end, update the index manually
index++;
}
Map (キー、値ベースの構造) をトラバースする必要がある場合は、@LukasEder によって記述されたメソッドを使用する必要があります (彼のコードを適応させます)。
Map<K, V> array = new HashMap<K, V>();
for (Entry<K, V> entry : array.entrySet()) {
// You have to explicitly call your callback. There is no "callback-syntax"
// to the Java "foreach" loop
System.out.println("key: " + entry.getKey());
System.out.println("value: " + entry.getValue());
//put your logic here...
}
PHP 配列は実際には連想配列であるため、コードに最も近いのは Java を使用することですMap
。
Map<K, V> array = new HashMap<K, V>();
for (Entry<K, V> entry : array.entrySet()) {
// You have to explicitly call your callback. There is no "callback-syntax"
// to the Java "foreach" loop
MyClass.myMethod(entry.getKey(), entry.getValue());
}
<K>
と<V>
をより具体的なタイプに置き換えます。たとえばMap<String, String>
、 、またはMap<Integer, String>
など...
真の (インデックス付き) 配列を使用している場合、インデックスにアクセスするために "foreach" ループを記述することはできません。インデックス付きループに頼る必要があります。
// Using Java arrays
String[] array = { "a", "b", "c" };
for (int i = 0; i < array.length; i++) {
MyClass.myMethod(i, array[i]);
}
// Using Java Lists
List<String> list = Arrays.asList("a", "b", "c");
for (int i = 0; i < list.size(); i++) {
MyClass.myMethod(i, list.get(i));
}
たとえば、Java には foreach があります。
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
for (String s : list) {
System.out.println(s);
}
はい。Iterableを実装する配列またはオブジェクトを反復処理する場合は、次の構文が機能します。
SomeType someValue=null;
for (someValue : setOfValues) {
...
}
例えば:
Map<String,String> colors=new HashMap<String,String>();
colors.put("r","red");
colors.put("g","green");
colors.put("b","blue");
for (String code : colors.keySet()) {
process(code, colors.get(code));
}
はい、反復しているコレクションがimplementsである限り、できますIterable
。SOあなたは次のようなものを持つことができます:
Map<String, Object> map = new HashMap<String, Object>();
...
for (String str : map.keySet())
{
System.out.println(str);
}
HashMap
これにより、キーと値のコレクションである が作成されます。Lists
やなどの通常のコレクションを反復したいだけの場合はArrays
、次のようにすることができます。
List<String> strings = new ArrayList<String>();
....
for(String str : strings)
{
System.out.println(str);
}
これは「拡張 for ループ」と呼ばれます。
スクリーンキャスト: http://www.youtube.com/watch?v=w41D0V-BnKQ
http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
http://www.java-tips.org/java-se-tips/java.lang/the-enhanced-for-loop.html