【发布时间】:2016-01-23 14:10:48
【问题描述】:
我正在尝试使用 Java 8 流和 lambda 表达式从我的 List<String> list 中仅提取数字。首先,我要做的是将字符串从文件加载到列表。之后我过滤流以获取包含“PL”的字符串。
我的文件:
Jan Kowalski PL 35000
Jiri Prohazka CZ 28000
Anna Malinowska PL 52000
Jozef Bak PL 49999
Helmut Schnittke DE 45000
Kleofas Oginski PL 45000
John Bull US 74000
Lukasz Zolw PL 9400
Franz Beckenbauer DE 83000
Frantisek Kupka CZ 32000
代码:
List<String> list = new ArrayList<>();
try (Stream<String> stream = Files.lines(Paths.get("file"),Charset.defaultCharset())) {
list = stream
.filter(line -> line.contains("PL"))
.peek(System.out::println)
.collect(Collectors.toList());
}
我认为现在最好的方法是从字符串中删除所有字母并只保留小数,但我有问题该怎么做。 最终结果应该让我将列表的元素解析为整数,对它们进行排序,并获得前三个元素的总和。 我已经做到了,但我确信有更好的方法来做到这一点(例如,只使用一个列表)
List<Integer> iList = new ArrayList<Integer>();
list.forEach(s->
{
s = s.replaceAll("\\D+","");
iList.add(Integer.parseInt(s));
});
Collections.sort(iList);
Collections.reverse(iList);
int sum = 0;
for(int i=0;i<3;i++){
sum=sum+iList.get(i);
}
任何想法如何在不使用任何额外列表的情况下做到这一点?
【问题讨论】:
标签: java string lambda java-8 java-stream