我是新来的Java 8,并试图在流的要求。我有一个CSV文件与成千上万recods我的CSV格式
DEPID,GRPID,EMPID,DepLocation,NoofEmployees,的empType === D100,CB,244340,USA,1000,合同 D101,CB,543126,USA,1900年,常驻 D101,CB,356147,USA,1800年,合同 D100,DB ,244896,HK,500,SemiContract D100,DB,543378,HK,100,永久
我的要求是有两个条件)EMPID开始与“244”或与EMPID“543” B开始)的empType是“合同”和“永久”筛选记录
下面我试着
try (Stream<String> stream = Files.lines(Paths.get(fileAbsolutePath))) {
list = stream
.filter(line -> line.contains("244") || line.contains("543"))
.collect(Collectors.toList());
}
这是过滤基于244和543的员工,但我担心的是,因为我使用的包含它可能获取其他数据也是IE将取回不仅EMPID列,但也从其他列中的数据(其他列也可能有数据与开始这些数字)
同样纳入的empType因为我逐行读取线也没有办法,我强制执行的empType应该是“永久”和“合同”
我失去了任何高级选项?
你可以不喜欢它的话,
Pattern comma = Pattern.compile(",");
Pattern empNum = Pattern.compile("(244|543)\\d+");
Pattern empType = Pattern.compile("(Contract|Permanent)");
try (Stream<String> stream = Files.lines(Paths.get("C:\\data\\sample.txt"))) {
List<String> result = stream.skip(2).map(l -> comma.split(l))
.filter(s -> empNum.matcher(s[2]).matches())
.filter(s -> empType.matcher(s[5]).matches())
.map(s -> Arrays.stream(s).collect(Collectors.joining(",")))
.collect(Collectors.toList());
System.out.println(result);
} catch (IOException e) {
e.printStackTrace();
}
第一读取文件,并跳过2个标题行。然后使用拆分它,
的性格。筛选出来使用EmpId
和EmpType
。接下来,再次合并的标记,形成行,最后收集各行成List
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句