的java 8流的多个滤波器

Reddynr:

我是新来的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应该是“永久”和“合同”

我失去了任何高级选项?

拉温德拉Ranwala:

你可以不喜欢它的话,

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个标题行。然后使用拆分它,的性格。筛选出来使用EmpIdEmpType接下来,再次合并的标记,形成行,最后收集各行成List

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章