我想将 for 循环重构为流:
for (TrackingGroup item : trackingGroups) {
List<IItem> items = new ArrayList<>();
items.add(new ItemText(getActivity().getString(R.string.track_title) + " " + trackingGroup.getTitle()));
for (ProfileAnswerItem answerItem : listofAnswers) {
for (TrackingItem trackingItem : item.getItems()) {
if (trackingItem.getId() == answerItem.getId()) {
ItemQuestionResult itemView = new ItemQuestionResult(new ItemAnswer(item.getId(), answerItem.getId(), answerItem.getText(), false, true),
items.size() > 1);
items.add(itemView);
// adapter.add(itemView);
} else {
if (item.getId() == answerItem.getTrackId() && answerItem.isCustom()) {
ItemQuestionResult itemView = new ItemQuestionResult(new ItemAnswer(item.getId(), answerItem.getId(), answerItem.getText(), false, true),
items.size() > 1);
if (answerItem.getId() != lastID) {
items.add(itemView);
//adapter.add(itemView);
lastID = answerItem.getId();
}
}
}
}
}
adapter.add(items);
}
这就是我此刻所拥有的:
Stream.of(trackingGroups)
.forEach(trackingGroup1 -> {
List<IItem> items = new ArrayList<>();
items.add(new ItemText(getActivity().getString(R.string.track_title) + " " + trackingGroup.getTitle()));
Stream.of(listofAnswers)
.forEach(profileAnswerItem -> {
Stream.of(trackingGroup1.getItems())
.forEach(trackingItem -> {
if (trackingItem.getId() == profileAnswerItem.getId()) {
ItemQuestionResult itemView = new ItemQuestionResult(new ItemAnswer(trackingGroup1.getId(),
profileAnswerItem.getId(), profileAnswerItem.getText(), false, true),
items.size() > 1);
items.add(itemView);
} else {
if (trackingGroup1.getId() == profileAnswerItem.getTrackId() && profileAnswerItem.isCustom()) {
ItemQuestionResult itemView = new ItemQuestionResult(new ItemAnswer(trackingGroup1.getId(),
profileAnswerItem.getId(), profileAnswerItem.getText(), false, true),
items.size() > 1);
if (profileAnswerItem.getId() != lastID) {
items.add(itemView);
lastID = profileAnswerItem.getId();
}
}
}
});
});
});
现在我遇到了变量 lastID
的问题。对于 lambda,这个变量应该是最终的。如何添加缺失的部分,然后在适配器中添加结果?
最佳答案
没有理由在这里使用流。 Streams are useful when defining sophisticated data processing queries.它们提供了一种紧凑而富有表现力的方式来定义流元素上的顺序操作,如 Oracle 提供的示例:
List<Integer> transactionsIds =
transactions.stream()
.filter(t -> t.getType() == Transaction.GROCERY)
.sorted(comparing(Transaction::getValue).reversed())
.map(Transaction::getId)
.collect(toList());
写.stream().forEach(...)
(或者Stream.of(...).forEach(...)
)是一段代码闻。您正在构建一个流并立即将其解构为对元素的常规迭代。常规的 for
或 for each
结构在这里看起来既简单又清晰,除非您也重构循环体的内容。
关于java - 将循环重构为android中的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46784100/