使用java流进行数据压缩
我一直试图找到一个如何使用java流作为压缩器的示例。我仍然没有想出如何做到这一点,我也没有找到其他人这样做。所以我想做的是计算一些事件,在流中,只要它们是连续的。一个简单的例子如下:使用java流进行数据压缩,java,stream,java-stream,run-length-encoding,Java,Stream,Java Stream,Run Length Encoding,我一直试图找到一个如何使用java流作为压缩器的示例。我仍然没有想出如何做到这一点,我也没有找到其他人这样做。所以我想做的是计算一些事件,在流中,只要它们是连续的。一个简单的例子如下: String str = "...---..."; String compressed = func(str); compressed.equals("3.3-3."); 将字符串放入整数流并计算它们的出现次数很简单。但是,以一个连续的顺序计算发生的事件,我不知道该怎么做。有没有一个好的方法来使用.reduce
String str = "...---...";
String compressed = func(str);
compressed.equals("3.3-3.");
将字符串放入整数流并计算它们的出现次数很简单。但是,以一个连续的顺序计算发生的事件,我不知道该怎么做。有没有一个好的方法来使用.reduce来实现这一点 我认为
流
s不适合用于运行长度编码。溪流和州通常不会很好地结合在一起。要记录您已经统计的字符数,不可避免地会涉及状态。一种方法是使用reduce(U标识、双函数累加器、二进制运算符组合器)
并将匿名类(是的,匿名类)传递给它,在这些匿名类中,可以保留一个变量来记录一个字符的数量。然后,您可以使用StringBuilder
s附加编码字符串。这不是一个优雅的解决方案
我有点创意,做了这个:
String str = "aaaajjjfjjeeee";
String result = Pattern.compile("(?<=(.))(?!\\1)")
.splitAsStream(str)
.map(x ->
Character.toString(x.charAt(0)) +
Integer.toString(x.length()))
.collect(Collectors.joining());
System.out.println(result);
String str=“aaaajjfjjeeee”;
字符串结果=模式。编译(“(?)?