![](/img/trans.png)
[英]GWTTestCase: JUnit Assertions within callback raises JavaScriptException
[英]JUnit assertions within in Java 8 stream
假設我有三個對象保存到數據庫並將db生成的ID設置為。 我不知道從方法saveToDb
返回的對象的順序。 但是我想對這些生成的ID進行測試。 我如何在流中做到這一點? 我想做這樣的事情:
List<MyObject> myObjects = getObjects();
numRecords = saveToDb(myObjects); // numRecords=3
List<Integer> intArray = Arrays.asList(1, 2, 3);
intArray.stream()
.forEach(it -> myObjects.stream()
.filter(it2 -> it2.getId().equals(it))
.????
但是我不確定我的assertEquals()
會在這樣的語句中出現在哪里。 或者我的方法都錯了? 我知道我可以使用簡單的for循環,但我喜歡流的優雅。 另外,有沒有辦法動態創建intArray,以防我有超過3個myObjects?
似乎(如果我理解正確),這樣的事情怎么樣:
boolean result = Arrays.asList(1, 2, 3).stream()
.allMatch(i -> objects
.stream()
.map(MyObject::getId)
.filter(j -> j == i).findAny().isPresent());
Assert.assertTrue(result);
所以你基本上想檢查一個MyObject實例是否被分配了一個ID? 與任何重要性的數組中的ID是否相等?
如果不:
List<MyObject> objects = getObjects();
saveToDb(objects);
objects.stream().map(MyObject::getId).forEach(Assert::assertNotNull);
假設MyObject上有一個“getId”方法。
只需為您的其他問題補充一點:
另外,有沒有辦法動態創建intArray,以防我有超過3個myObjects?
是的,您可以使用IntStream
根據對象的大小創建流,如:
IntStream.rangeClosed(1, objects.size()) // both start and end inclusive
並且還有一個方法IntStream.range(int start, int end)
,其end
是獨占的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.