The answer by Eran絕對是執行搜索的直接方式。不過,我想提出一個稍微不同的方法:
private static final Map<String, Runnable> stringToRunnable = new HashMap<>();
{
stringToRunnable.put("a", this::doSomething);
stringToRunnable.put("b", this::doSomethingElse);
stringToRunnable.put("c", this::doSomethingElseElse);
}
public static void main(String[] args) {
List<String> names = Arrays.asList("1", "2", "b", "a");
names.stream()
.filter(stringToRunnable::containsKey)
.findFirst()
.ifPresent(name -> stringToRunnable.get(name).run());
}
private void doSomethingElseElse() {
}
private void doSomethingElse() {
}
public void doSomething() {
}
,沒有工作是下面的代碼的一部分,但我把它添加到main()
功能假設a
,b
和c
都是字符串。但是,這個想法可以適用於任何數據類型。
names.stream()
.filter(stringToRunnable::containsKey)
.findFirst()
.ifPresent(name -> stringToRunnable.get(name).run());
這個想法是保留鍵的地圖和Runnable
s。通過將Runnable
作爲值,可以定義不帶參數的void方法引用。流首先過濾掉地圖中不存在的所有值,然後找到第一個匹配項,並在找到時執行它的方法。
這段代碼不會做你認爲它的作用;使用'equals'來比較字符串而不是'=='。請參閱:[如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Jesper
您的「基本上」不會描述您因爲你也*爲這三種情況分別調用不同的方法。你爲什麼要*重寫這個來使用'stream()'?它看起來不像自然適合。 –
我只是想知道是否有可能在單次迭代中使用stream()來完成。 – AriseEVE