java.lang.Object
org.miaixz.bus.core.center.map.concurrent.Weighers

public final class Weighers extends Object
A common set of Weigher and EntryWeigher implementations.
Since:
Java 17+
Author:
Kimi Liu
See Also:
  • Method Details

    • asEntryWeigher

      public static <K, V> EntryWeigher<K,V> asEntryWeigher(Weigher<? super V> weigher)
      A entry weigher backed by the specified weigher. The selector of the value determines the selector of the entry.
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      weigher - the weigher to be "wrapped" in a entry weigher.
      Returns:
      A entry weigher view of the specified weigher.
    • entrySingleton

      public static <K, V> EntryWeigher<K,V> entrySingleton()
      A weigher where an entry has a selector of 1. A map bounded with this weigher will evict when the number of data-value pairs exceeds the capacity.
      Type Parameters:
      K - 键类型
      V - 值类型
      Returns:
      A weigher where a value takes one unit of capacity.
    • singleton

      public static <V> Weigher<V> singleton()
      A weigher where a value has a selector of 1. A map bounded with this weigher will evict when the number of data-value pairs exceeds the capacity.
      Type Parameters:
      V - 值类型
      Returns:
      A weigher where a value takes one unit of capacity.
    • byteArray

      public static Weigher<byte[]> byteArray()
      A weigher where the value is a byte array and its selector is the number of bytes. A map bounded with this weigher will evict when the number of bytes exceeds the capacity rather than the number of data-value pairs in the map. This allows for restricting the capacity based on the memory-consumption and is primarily for usage by dedicated caching servers that hold the serialized data.

      A value with a selector of 0 will be rejected by the map. If a value with this selector can occur then the caller should eagerly evaluate the value and treat it as a removal operation. Alternatively, a custom weigher may be specified on the map to assign an empty value a positive selector.

      Returns:
      A weigher where each byte takes one unit of capacity.
    • iterable

      public static <E> Weigher<? super Iterable<E>> iterable()
      A weigher where the value is a Iterable and its selector is the number of elements. This weigher only should be used when the alternative collection() weigher cannot be, as evaluation takes O(n) time. A map bounded with this weigher will evict when the total number of elements exceeds the capacity rather than the number of data-value pairs in the map.

      A value with a selector of 0 will be rejected by the map. If a value with this selector can occur then the caller should eagerly evaluate the value and treat it as a removal operation. Alternatively, a custom weigher may be specified on the map to assign an empty value a positive selector.

      Type Parameters:
      E - 元素类型
      Returns:
      A weigher where each element takes one unit of capacity.
    • collection

      public static <E> Weigher<? super Collection<E>> collection()
      A weigher where the value is a Collection and its selector is the number of elements. A map bounded with this weigher will evict when the total number of elements exceeds the capacity rather than the number of data-value pairs in the map.

      A value with a selector of 0 will be rejected by the map. If a value with this selector can occur then the caller should eagerly evaluate the value and treat it as a removal operation. Alternatively, a custom weigher may be specified on the map to assign an empty value a positive selector.

      Type Parameters:
      E - 元素类型
      Returns:
      A weigher where each element takes one unit of capacity.
    • list

      public static <E> Weigher<? super List<E>> list()
      A weigher where the value is a List and its selector is the number of elements. A map bounded with this weigher will evict when the total number of elements exceeds the capacity rather than the number of data-value pairs in the map.

      A value with a selector of 0 will be rejected by the map. If a value with this selector can occur then the caller should eagerly evaluate the value and treat it as a removal operation. Alternatively, a custom weigher may be specified on the map to assign an empty value a positive selector.

      Type Parameters:
      E - 元素类型
      Returns:
      A weigher where each element takes one unit of capacity.
    • set

      public static <E> Weigher<? super Set<E>> set()
      A weigher where the value is a Set and its selector is the number of elements. A map bounded with this weigher will evict when the total number of elements exceeds the capacity rather than the number of data-value pairs in the map.

      A value with a selector of 0 will be rejected by the map. If a value with this selector can occur then the caller should eagerly evaluate the value and treat it as a removal operation. Alternatively, a custom weigher may be specified on the map to assign an empty value a positive selector.

      Type Parameters:
      E - 元素类型
      Returns:
      A weigher where each element takes one unit of capacity.
    • map

      public static <K, V> Weigher<? super Map<K,V>> map()
      A weigher where the value is a Map and its selector is the number of entries. A map bounded with this weigher will evict when the total number of entries across all values exceeds the capacity rather than the number of data-value pairs in the map.

      A value with a selector of 0 will be rejected by the map. If a value with this selector can occur then the caller should eagerly evaluate the value and treat it as a removal operation. Alternatively, a custom weigher may be specified on the map to assign an empty value a positive selector.

      Type Parameters:
      K - 键类型
      V - 值类型
      Returns:
      A weigher where each entry takes one unit of capacity.