java 在java8中压缩
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 在java8中压缩相关的知识,希望对你有一定的参考价值。
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.function.BiFunction;
import java.util.stream.LongStream;
import java.util.stream.Stream;
/**
*
*/
public class StreamUtil {
public static <T, U, R> Stream<R> zip(Stream<T> s1, Stream<U> s2, BiFunction<T,U,R> f) {
Iterator<U> itr = s2.iterator();
return s1.filter(x-> itr.hasNext()).map(x -> f.apply(x, itr.next()));
}
public static <T,U> Stream<Pair<T,U>> zip(Stream<T> s1, Stream<U> s2) {
return zip(s1, s2, (a, b) -> new Pair(a, b));
}
public static <T> Stream<Pair<T,Long>> zipWithIndex(Stream<T> s1) {
return zip(s1, LongStream.iterate(0, n -> n +1).boxed());
}
public static class Pair<T, U> {
final public T _1;
final public U _2;
public Pair(T t, U u) {
_1 = t;
_2 = u;
}
@Override public boolean equals(Object o1){
if (o1 instanceof Pair) {
Pair p = (Pair)o1;
return _1.equals(p._1) && _2.equals(p._2);
}
return false;
}
@Override public int hashCode() {
int hash = 1;
hash = hash * 31 + _1.hashCode();
hash = hash * 31 + _2.hashCode();
return hash;
}
@Override public String toString(){
return "(" + _1 + "," + _2 +")";
}
}
//test
public static void main(String[] args) {
List<String> list = Arrays.asList("1", "2", "3", "4");
Stream<String> s1 = list.stream();
Stream<String> s2 = list.stream().skip(1);
Stream<Pair<String, String>> zip = zip(s1, s2);
// lazy evalution
zip.map(p -> Integer.parseInt(p._1) *10 + Integer.parseInt(p._2))
.forEach(System.out::println);
zipWithIndex(list.stream()).forEach(System.out::println);
}
}
以上是关于java 在java8中压缩的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Java 在 SFTP 或 FTP 服务器中压缩文件?
我如何在 Java 中压缩文件而不包含文件路径
有没有办法在 Java 中压缩字节缓冲区?
如何在 Java 中压缩 JSON 并在 Javascript 中解压缩 [关闭]
java中压缩字符串的长度
在python中压缩文件