java - java - 如何替换Java列表列表中的单词?
问题描述
我有一个列表列表,如下所示:
List<String> message1 = Arrays.asList("this", "is", "a", "text");
List<String> message2 = Arrays.asList("this", "", "a", "");
List<String> message3 = Arrays.asList("", "is", "", "a", "text");
List<List<String>> allList = Arrays.asList(message1 , message2 , message3 );
在我的练习中,我必须在所有消息的帮助下恢复原始消息。如果缺少该单词,它将显示为“”。
如果所有消息中都漏掉了这个词,我想用“丢失的词”之类的东西来代替它。例如:
List<String> message1 = Arrays.asList("this", "is", "a", "");
List<String> message2 = Arrays.asList("this", "", "a", "");
List<String> message3 = Arrays.asList("", "is", "", "a", "");
List<List<String>> allList = Arrays.asList(message1 , message2 , message3 );
在该示例中,所有消息中都缺少单词 text。在那种情况下,我想在 allList 的那个位置用“lost-word”这个词替换。
我尝试做这样的事情:
for(int i = 0; i < message1.size(); i++){
if(allList.stream().allMatch(m -> m.get(i).equals(""))) {
allList.forEach(m -> m.set(i, "lost-word"));
}
}
但我有以下错误:我在封闭范围内定义的局部变量必须是最终的或有效的最终。
看来我可以在 tha lambda 表达式中使用 i,我能做些什么来替换所有消息中丢失的单词?
在此先感谢,并为糟糕的英语感到抱歉。
解决方案
为避免获取有关捕获变量的错误,i
您可以执行以下技巧:
for(int i = 0; i < message1.size(); i++){
int cur = i;
if(allList.stream().allMatch(m -> m.get(cur).equals(""))) {
allList.forEach(m -> m.set(cur, "lost-word"));
}
}
这里cur
实际上是 final 的(意味着即使它没有声明它也不会改变final
),我们可以在 lambda 中捕获它。
推荐阅读
- python - 在 python 2.7 中将数据拆分为交替组
- angular - 如何以角度的动态形式验证?
- mysql - 使用 mysql C 连接器连接到 memsql 时出错
- python - 使代码行在特定时间运行 - Python 3
- docker - 如何在 Docker 中支持多播网络
- java - 从 TeamCity 运行测试时出现“无法找到或加载在线主类”错误
- javascript - 不等于性能 JavaScript
- sql - SQL 日期变量硬编码
- vb.net-2010 - 我想更新 Sql Server 数据库如何在 SQL Server 数据库中添加列或表抛出一个 VB.net 应用程序
- javascript - `Contacts` 中的 prop `Email` 和 'Phone' 标记为必填,但其值为 `undefined`