簡體   English   中英

Java流創建對象並進行比較

[英]Java stream create object and compare

我是Java流的新手。 我要拆分流中過濾器返回的字符串,用拆分中的字符串創建一個新對象,並將每個對象與預定義對象進行比較。 Stream看起來像這樣(我知道這是不正確的,只是我想要做的代表):

xmlstream.stream()
         .filter(xml->xml.getName()) //returns a string
         .map(returnedString -> split("__"))
         .map(eachStringInList -> new TestObj(returnedStr[0], returnedStr[1]))
         .map(eachTestObj -> eachTestObj.compareTo(givenObj))
         .max(Comparing.compare(returnedObj :: aProperty))

我該如何實現這一目標? 基本上映射列表中的每個字符串以創建對象,將其與修復對象進行比較,並根據其中一個屬性返回最大值。 謝謝。

您可以像這樣使用reduce

TestObj predefined = ...

TestObj max = 
       xmlstream.stream()
                .map(xml -> xml.getName()) //returns a string
                .map(s -> s.split("__"))
                .map(a -> new TestObj(a[0], a[1]))
                .reduce(predifined, (e, a) -> 
                      e.aProperty().compareTo(a.aProperty()) >= 0 ? e : a);

更有效的上述版本將是:

TestObj predefined = ...
TestObj max =
        xmlstream.stream()
                 .map(xml -> xml.getName()) //returns a string
                 .map(s -> s.split("__"))
                 .map(a -> new TestObj(a[0], a[1]))
                 .filter(e -> e.aProperty().compareTo(predefined.aProperty()) > 0)
                 .findFirst()
                 .orElse(predefined);

更新:

如果要從少於預定義TestObj所有TestObj對象中通過給定屬性檢索max對象,則可以按以下步驟操作:

TestObj predefined = ...
Optional<TestObj> max =
             xmlstream.stream()
                      .map(xml -> xml.getName()) 
                      .map(s -> s.split("_"))
                      .map(a -> new TestObj(a[0], a[1]))
                      .filter(e -> e.aProperty().compareTo(predefined.aProperty()) < 0)
                      .max(Comparator.comparing(TestObj::aProperty));

max返回一個Optional<T> ; 如果您不熟悉它,請參閱此處的文檔以熟悉打開Optional<T>對象的不同方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM