📄 lawlrule.java
字号:
/**
*
*/
package org.solol.mmseg.internal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.solol.mmseg.core.IChunk;
import org.solol.mmseg.core.IRule;
/**
* @author solo L
*
*/
public class LAWLRule implements IRule {
/*
* (non-Javadoc)
*
* @see org.solol.mmseg.core.IRule#invoke()
*/
public final IChunk[] invoke(final IChunk[] chunks) {
LAWLRuleComparator[] orderedChunks = new LAWLRuleComparator[chunks.length];
for (int i = 0; i < chunks.length; i++) {
orderedChunks[i] = new LAWLRuleComparator(chunks[i]);
}
Arrays.sort(orderedChunks);
int index = 0;
double largestAverageLength = orderedChunks[index].getChunk()
.getAverageLength();
List list = new ArrayList(1);
list.add(orderedChunks[index].getChunk());
index++;
while (index < orderedChunks.length) {
if (orderedChunks[index].getChunk().getAverageLength() == largestAverageLength) {
list.add(orderedChunks[index].getChunk());
} else {
break;
}
index++;
}
IChunk[] largestAverageLengthChunks = new IChunk[list.size()];
list.toArray(largestAverageLengthChunks);
return largestAverageLengthChunks;
}
static class LAWLRuleComparator implements Comparable {
private IChunk chunk;
public LAWLRuleComparator(IChunk chunk) {
this.chunk = chunk;
}
public IChunk getChunk() {
return chunk;
}
public int compareTo(Object obj) {
IChunk another = ((LAWLRuleComparator) obj).getChunk();
double temp = another.getAverageLength()
- chunk.getAverageLength();
if (temp > 0D) {
return 1;
} else if (temp < 0D) {
return -1;
} else {
return 0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -