zip

Python有个zip()函数,可以像拉链一样组合两个列表。
zipped = zip(1,2,3], [4,5,6,7,8])

对于Java,实现这个操作可以如下:

 List<String> subjectArr = Arrays.asList("aa", "bb", "cc");
List<Long> numArr = Arrays.asList(2L, 6L, 4L);

// @Beta
public static <A, B> List<Pair<A, B>> zipGuava(List<A> as, List<B> bs) {
    return Streams.zip(as.stream(), bs.stream(), Pair::new)
            .collect(Collectors.toList());
}

public static <A, B> List<Pair<A, B>> zipJava8(List<A> as, List<B> bs) {
    return IntStream.range(0, Math.min(as.size(), bs.size()))
            .mapToObj(i -> new Pair<>(as.get(i), bs.get(i)))
            .collect(Collectors.toList());
}

public static <A, B> List<Map.Entry<A, B>> zipJava9(List<A> as, List<B> bs) {
    return IntStream.range(0, Math.min(as.size(), bs.size()))
            .mapToObj(i -> Map.entry(as.get(i), bs.get(i)))
            .collect(Collectors.toList());
}

匹配文件后缀

一般用于校验接口收到的文件名是不是符合要求

^\S+\.(pdf|doc|docx|txt|jpg|png|bmp|msg)$
^[\s\S]*\.(pdf|doc|docx|txt|jpg|png|bmp|msg)$
^\w*\.(pdf|doc|docx|txt|jpg|png|bmp|msg)$

参数的解释:

  • + 重复一次或更多次
  • * 重复零次或更多次
  • \s 匹配任意的空白符
  • \S 匹配任意不是空白符的字符
  • \W 匹配任意不是字母,数字,下划线,汉字的字符

使用如:@Pattern(regexp = "^\\S+\\.pdf|\\S+\\.doc|\\S+\\.docx|\\S+\\.txt|\\S+\\.jpg|\\S+\\.png|\\S+\\.bmp|\\S+\\.msg$", message = "文件上传失败,原因:只能上传doc、docx、txt、pdf、jpg、png、bmp、msg格式的文件")

需要注意的是,这几个表达式用SDL Regex Fuzzer检测处理的都比较慢,之前检测时有几率让程序崩溃,最近没出现过这个情况(应该不存在ReDos)。

标签: none

添加新评论