Ash*_*iya 28 java java-8 java-stream
我的POJO如下
class EventUser {
private id;
private userId;
private eventId;
}
Run Code Online (Sandbox Code Playgroud)
我按如下方式检索EventUser对象:
List<EventUser> eventUsers = eventUserRepository.findByUserId(userId);
Run Code Online (Sandbox Code Playgroud)
说'eventUsers'如下:
[
{"id":"id200","userId":"001","eventId":"1010"},
{"id":"id101","userId":"001","eventId":"4212"},
{"id":"id402","userId":"001","eventId":"1221"},
{"id":"id301","userId":"001","eventId":"2423"},
{"id":"id701","userId":"001","eventId":"5423"},
{"id":"id601","userId":"001","eventId":"7423"}
]
Run Code Online (Sandbox Code Playgroud)
使用流式传输,而不使用任何中间变量,如何在给定的EventUser.id之后过滤和收集事件:ex:
List<EventUser> filteredByOffSet = eventUsers.stream.SOMEFILTER_AND_COLLECT("id301");
Run Code Online (Sandbox Code Playgroud)
结果应该是:
[{"id":"id301","userId":"001","eventId":"2423"},
{"id":"id701","userId":"001","eventId":"5423"},
{"id":"id601","userId":"001","eventId":"7423"}]
Run Code Online (Sandbox Code Playgroud)
Pet*_*rey 24
在Java 8中,您需要一个有状态的过滤器
public static <T> Predicate<T> from(Predicate<T> test) {
boolean[] found = { false };
// once found, always true
return t -> found[0] || (found[0] = test.test(t));
}
Run Code Online (Sandbox Code Playgroud)
注意:这仅对单线程流有意义.
List<EventUser> filteredByOffSet =
eventUsers.stream()
.filter(from(e -> "id301".equals(e.getId()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
S.K*_*.K. 14
首先查找搜索项的索引:
int asInt = IntStream.range(0, list.size())
.filter(userInd-> list.get(userInd).equals(<criteria>))
.findFirst()
.getAsInt();
Run Code Online (Sandbox Code Playgroud)
获取索引上和之后的项目:
list.stream().skip(asInt).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3598 次 |
最近记录: |