我是新來的Java,不知道我怎麼會去執行像Ruby的.each
的方法進行過類迭代像數組和列表更容易?如何在Java中實現Ruby的「.each」方法?
回答
你不能讓每一個功能,像Ruby有,因爲Java不接受塊像Ruby一樣的參數。你可以使用一個接口並提供一個匿名類定義,但這比每個構造使用Java更復雜。要爲每個在Java中這樣做,你可以這樣做以下:
String[] myStrings = { "a", "b", "c" };
for (String str : myStrings) {
// Do something with each String value.
System.out.println(str);
}
好的。我有一種預感可能是不可能的。我真的想避免爲'for'循環編寫完整的語法。 – 2011-12-19 03:44:42
說實話,樣板代碼不是太多;唯一的區別(根據冗長)是你必須指定類型。 – 2011-12-19 04:24:42
是的,你是對的。只是寫java所有東西似乎都非常冗長。我認爲這是正確的答案,因爲這是最理智的做法。謝謝回答。 – 2011-12-26 05:50:43
您可以使用Iterator做到這一點,或者你可以用一個特殊的版本做:
ArrayList<String> strings = ...;
for (String str : strings) {
System.out.println(str);
}
它變得醜陋由於缺乏封鎖,直到Java的8,但在這裏它是:
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class EachTest {
interface ItemProcessor<T>{
void process(T item);
}
static <T> void each(Collection<T> collection, ItemProcessor<T> processor){
for (T item: collection){
processor.process(item);
}
}
public static void main(String[] args) {
List<String> list=Arrays.asList(new String("foo"),"bar");
EachTest.<String>each(list,new ItemProcessor<String>() {
@Override
public void process(String item) {
System.out.println(item);
}
});
}
}
我想在Java中8,這將是(但不可以引用我這句話):
public static void main(String[] args) {
List<String> list=Arrays.asList(new String("foo"),"bar");
EachTest.<String>each(list,String item=>System.out.println(item));
}
我認爲截至上週,這將是' - >'而不是'=>'。 – 2011-12-19 10:58:42
雖然這是事實,這是略顯尷尬的標準Java,一對夫婦的流行的庫(以達到你甚至可以已經在使用)提供Predicate
接口,至少可以節省大量的寫入工作。最重要的是,他們還提供經過全面測試,經過驗證的幫助類,這意味着您不必編寫迭代代碼。
查看谷歌Guava的Iterables類 - 你可以做類似filter()
,findIf()
和removeIf()
的東西。如果使用得當,這些方法可以獲得非常可讀的結果。
Apache的Commons Collections中提供了CollectionUtils類似的東西。像find()
,filter()
和select()
這樣的方法都需要Predicate
。
谷歌番石榴還更進一步,爲您提供了Predicates
幫手其中有罐頭Predicate
實例的whole load - 比如isNull
,containsPattern
和isInstanceOf
。
檢查出來,如果你想避免重新發明輪子這個東西。
+1。真的需要看番石榴... – 2011-12-19 04:06:41
- 1. 如何在Nativescript中實現Java方法?
- 2. 如何在Ruby中的方法中實現for循環
- 3. 如何實現方法在Java
- 4. 在Ruby中實現一種類方法
- 5. 在Ruby中實現訪問器方法
- 6. java:如何實現StringBuilder的replaceAll方法
- 7. 如何在java中的sinlgly linkedlist iterator中實現hasNext方法?
- 8. 如何實現同步Java方法
- 9. 如何訪問在Java中實現Runnable的對象的方法?
- 10. 如何實現Azure的雲服務的RoleEntryPoint.OnStop方法在Java中
- 11. 如何實現getPrevious方法在單鏈表中的Java
- 12. 在Java Hashmap中實現remove方法?
- 13. 在Scala中實現Java接口方法
- 14. 在java中實現抽象方法/類
- 15. 在java中實現equals方法
- 16. WordPress的:如何實現for-each循環?
- 17. 如何在C++中將方法實現爲final(最終如JAVA)?
- 18. 如何在IBAction中實現NSArray方法?
- 19. 如何在VB.NET中實現GetStableHash方法
- 20. 如何在TypeScript中實現clone()方法?
- 21. 如何在android中實現notifysetDatachanged方法?
- 22. 如何在c#中實現Array.ConvertAll方法
- 23. Java在派生類中實現接口方法的方法
- 24. 如何在Java中實現
- 25. 如何在Java中實現
- 26. 如何在Java中實現
- 27. 如何在Java中實現
- 28. 如何在Java中實現異步方法調用?
- 29. 如何通過css或java在extjs4中實現這個方法
- 30. C實現Java Arrays.binarySearch方法
有許多實現的,但他們因爲需要創建一個接口實現所有笨重。在Java 8關閉之前,你應該評估它們是否真的是你想要的。如果你編寫了很多具體的函數,它們可以是有意義的。 – 2011-12-19 02:55:18