我是Java 8的新手,我正在研究流。我正在尝试填充一个日期在指定日期之后的消息数组列表。我需要这个新的ArrayList最多有16个项目。我尝试了以下方法:
private static final int MAX_MESSAGES_NUM = 16;
public ArrayList<Messages> filterMessagesByData(Calendar filterDate, ArrayList<Messages> messagesList) {
ArrayList<Messages> filteredMessages = new ArrayList<Messages>();
int msgCount = 0;
messagesList.stream().filter(message -> {
Calendar msgDate = new GregorianCalendar();
try {
msgDate.setTime(new SimpleDateFormat("dd/MM/yy").parse(message.getDate()));
msgCount ++;
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException();
}
return (msgDate.compareTo(filterDate) >= 0) && msgCount < MAX_MESSAGES_NUM;
}).forEach(filteredMessages::add);
return filteredMessages;
}
但它在 msgCount
行给我一个错误:
封闭范围中定义的局部变量msgCount必须是final或实际上是final。
我怀疑外部变量不能在lambda表达式中修改。
有没有一种方法可以使用流和过滤器来实现?
您可以使用<code>Stream。limit(maxSize)以限制流
中的元素数:
public List<Messages> filterMessagesByData(Calendar filterDate, ArrayList<Messages> messagesList) {
return messagesList.stream().filter(message -> {
Calendar msgDate = Calendar.getInstance();
try {
msgDate.setTime(new SimpleDateFormat("dd/MM/yy").parse(message.getDate()));
} catch (ParseException e) {
throw new RuntimeException(e);
}
return msgDate.compareTo(filterDate) >= 0;
}).limit(MAX_MESSAGES_NUM).collect(Collectors.toList());
}
我在您的初始代码中更改了几件事:
新的GregorianCalendar()
被替换为Calendar.getInstance()
Collectors直接收集列表中的所有元素,而不是使用forEach
。toList()
问题内容: 我需要用ArrayList填充JComboBox。有什么办法吗? 问题答案: 使用ArrayList类的方法并将其传递给 有关更多信息,请参见JavaDoc和教程。
问题内容: 从问题的答案如何对varchar []使用array_agg() , 我们可以创建一个自定义的聚合函数来聚合Postgres中的n维数组,例如: 一个约束是值必须共享 相同的数组范围和相同的长度 ,处理空值和不同的长度是行不通的。 从答案: 没有办法解决,数组类型不允许在Postgres中出现这种不匹配的情况。您可以使用NULL值填充数组,以便所有维都具有匹配范围。 我有像这样的行 我
问题内容: 我在数组列表中有hashbles。 这里的信息包含我的哈希表。我如何才能将此“信息”对象转换为其他类/意图? 谢谢… 问题答案: 创建一个延伸的类与 对 Custom.java 传递到下一个活动。 在下一个活动中检索
我遇到了以下问题:当手机应该输入时,我需要实现这种情况的解决方案。这部手机应该有不可移动的部分,最后四个数字应该在开头填写下划线,然后当用户键入下划线时,应该将其更改为数字,例如: < code> 12345____ - 我实现了不可移除的部分。我是这样做的: 但现在我不明白,如何处理下划线的逻辑。我尝试在< code>doAfterTextChanged中添加下划线,比如if
问题内容: 我的Android应用程序需要使用中填充ListView数据ArrayList。 我这样做很麻烦。有人可以帮我提供代码吗? 问题答案: 你需要通过进行操作,以使ArrayList(或任何其他集合)适应布局中的项目(ListView,Spinner等)。 这是Android开发人员指南所说的: 一个管理任意对象数组支持的。默认情况下,此类期望提供的资源ID引用单个。如果要使用更复杂的布局