Java 8の中でforeachで循環して対象のindexを獲得して詳しく説明します。
前言
Java 8では、私たちはよくlamboda表現を使ってforeachサイクルを行いますが、Listを見ている間にオブジェクトのindexを取得したいと思いますが、Java 8、9、10、11には関連したサポートがありません。同じ問題も拡張型forサイクルにあります。涙を含まずにforという場合が多いです。i私たちの期待
for(int i=0;i)
ConsmerとBiConsmer
簡単な例を見ます。
single
multiiPad:double params
ここでは、私たちが普段書いている矢印の関数は、実はConsmerやBiConsmerのオブジェクトです。
カスタムConsmer
foreachソース
0:111
1:222
2:333
PS:このセットも使えますよ。でも、セットの中でこのindexは下付きではないです。
締め括りをつける
ここでは、Java 8でforeachループでオブジェクトを取得するindexについての以下の記事を紹介します。Java 8については、対象のindexを取得して、より多くの関連記事を検索してください。または、以下の関連記事を引き続き閲覧してください。これからもよろしくお願いします。
Java 8では、私たちはよくlamboda表現を使ってforeachサイクルを行いますが、Listを見ている間にオブジェクトのindexを取得したいと思いますが、Java 8、9、10、11には関連したサポートがありません。同じ問題も拡張型forサイクルにあります。涙を含まずにforという場合が多いです。i
list.foreach((item,index)->{}) //
よくあるリスト取得index方法for(int i=0;i
for (int i = 0; i < list.size(); i++) {
}
indexOf(Obj)
for (Object o : list) {
list.indexOf(o); // Set
}
そして…
int i = 0;
for (String s : list) {
i++;
}
上記の方法は私達が望んでいるものではないことは明らかです。ConsmerとBiConsmer
簡単な例を見ます。
Consumer<String> consumer = t -> System.out.println(t);
consumer.accept("single");
BiConsumer<String, String> biConsumer = (k, v) -> System.out.println(k+":"+v);
biConsumer.accept("multipart","double params");
出力結果:single
multiiPad:double params
ここでは、私たちが普段書いている矢印の関数は、実はConsmerやBiConsmerのオブジェクトです。
カスタムConsmer
foreachソース
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
ソースを分析すると、我々のlist foreachメソッドはConsmerオブジェクトに導入され、サポートパラメータですが、私たちが欲しいのはitem、indexの二つのパラメータです。明らかに満足していません。ここでConsmerをカスタマイズできます。
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class LambadaTools {
/**
* BiConsumer foreach index
*
* @param biConsumer
* @param <T>
* @return
*/
public static <T> Consumer<T> forEachWithIndex(BiConsumer<T, Integer> biConsumer) {
/* , forEach Consumer , lambada int ++ ,
AtomicInteger , getAndIncrement , AtomicInteger */
class IncrementInt{
int i = 0;
public int getAndIncrement(){
return i++;
}
}
IncrementInt incrementInt = new IncrementInt();
return t -> biConsumer.accept(t, incrementInt.getAndIncrement());
}
}
呼び出しの例:
List<String> list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
list.forEach(LambadaTools.forEachWithIndex((item, index) -> {
System.out.println(index +":"+ item);
}));
出力結果は以下の通りです。0:111
1:222
2:333
PS:このセットも使えますよ。でも、セットの中でこのindexは下付きではないです。
締め括りをつける
ここでは、Java 8でforeachループでオブジェクトを取得するindexについての以下の記事を紹介します。Java 8については、対象のindexを取得して、より多くの関連記事を検索してください。または、以下の関連記事を引き続き閲覧してください。これからもよろしくお願いします。