Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java流进行数据压缩_Java_Stream_Java Stream_Run Length Encoding - Fatal编程技术网

使用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

我一直试图找到一个如何使用java流作为压缩器的示例。我仍然没有想出如何做到这一点,我也没有找到其他人这样做。所以我想做的是计算一些事件,在流中,只要它们是连续的。一个简单的例子如下:

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”;
字符串结果=模式。编译(“(?)?