下面列出了com.google.common.collect.ImmutableRangeMap#Builder ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private ImmutableRangeMap<Integer, Capability> calculateAgreedCapabilities(
final List<Capability> a, final List<Capability> b) {
final List<Capability> caps = new ArrayList<>(a);
caps.sort(CAPABILITY_COMPARATOR);
caps.retainAll(b);
final ImmutableRangeMap.Builder<Integer, Capability> builder = ImmutableRangeMap.builder();
// Reserve some messages for WireProtocol
int offset = WIRE_PROTOCOL_MESSAGE_SPACE;
String prevProtocol = null;
for (final Iterator<Capability> itr = caps.iterator(); itr.hasNext(); ) {
final Capability cap = itr.next();
final String curProtocol = cap.getName();
if (curProtocol.equalsIgnoreCase(prevProtocol)) {
// A later version of this protocol is already being used, so ignore this version
continue;
}
prevProtocol = curProtocol;
final SubProtocol subProtocol = subProtocols.get(cap.getName());
final int messageSpace = subProtocol == null ? 0 : subProtocol.messageSpace(cap.getVersion());
if (messageSpace > 0) {
builder.put(Range.closedOpen(offset, offset + messageSpace), cap);
}
offset += messageSpace;
}
return builder.build();
}
MaterialData chooseShuffledMaterial() {
ImmutableRangeMap.Builder<Double, MaterialData> weightsBuilder = ImmutableRangeMap.builder();
double sum = 0d;
for (MaterialData material : shuffleableMaterialDeficit.materials()) {
double weight = shuffleableMaterialDeficit.get(material);
if (weight > 0) {
weightsBuilder.put(Range.closedOpen(sum, sum + weight), material);
sum += weight;
}
}
RangeMap<Double, MaterialData> weights = weightsBuilder.build();
return weights.get(match.getRandom().nextDouble() * sum);
}
MaterialData chooseShuffledMaterial() {
ImmutableRangeMap.Builder<Double, MaterialData> weightsBuilder = ImmutableRangeMap.builder();
double sum = 0d;
for(MaterialData material : shuffleableMaterialDeficit.materials()) {
double weight = shuffleableMaterialDeficit.get(material);
if(weight > 0) {
weightsBuilder.put(Range.closedOpen(sum, sum + weight), material);
sum += weight;
}
}
RangeMap<Double, MaterialData> weights = weightsBuilder.build();
return weights.get(match.getRandom().nextDouble() * sum);
}
@Test
public void testBuildRangeMap() {
BlockLocation[] blocks = buildBlockLocations(new String[4], 256*1024*1024);
long tA = System.nanoTime();
ImmutableRangeMap.Builder<Long, BlockLocation> blockMapBuilder = new ImmutableRangeMap.Builder<>();
for (BlockLocation block : blocks) {
long start = block.getOffset();
long end = start + block.getLength();
Range<Long> range = Range.closedOpen(start, end);
blockMapBuilder = blockMapBuilder.put(range, block);
}
ImmutableRangeMap<Long,BlockLocation> map = blockMapBuilder.build();
long tB = System.nanoTime();
System.out.println(String.format("Took %f ms to build range map", (tB - tA) / 1e6));
}
public static LineMap create(String source) {
int last = 0;
int line = 1;
ImmutableRangeMap.Builder<Integer, Integer> builder = ImmutableRangeMap.builder();
for (int idx = 0; idx < source.length(); idx++) {
char ch = source.charAt(idx);
switch (ch) {
// handle CR line endings
case '\r':
// ...and CRLF
if (idx + 1 < source.length() && source.charAt(idx + 1) == '\n') {
idx++;
}
// falls through
case '\n':
builder.put(Range.closedOpen(last, idx + 1), line++);
last = idx + 1;
break;
default:
break;
}
}
// no trailing newline
if (last < source.length()) {
builder.put(Range.closedOpen(last, source.length()), line++);
}
return new LineMap(source, builder.build());
}