簡體   English   中英

在Java中分配對象ID的優雅方式

[英]Elegant way to assign object id in Java

我有一個對象類...拉特說蘋果。

每個蘋果對象都有一個唯一的標識符(id)...我如何確保(優雅和有效)新創建的具有唯一ID。

謝謝

在Apple類中有一個static int nextId並在構造函數中遞增它。

確保增量代碼是原子代碼可能是謹慎的,所以你可以做這樣的事情(使用AtomicInteger)。 這將保證如果兩個對象完全同時創建,則它們不共享相同的Id。

public class Apple {
    static AtomicInteger nextId = new AtomicInteger();
    private int id;

    public Apple() {
        id = nextId.incrementAndGet();
   }
}

使用java.util.UUID.randomUUID()

它不是int ,但保證是唯一的:

表示不可變通用唯一標識符(UUID)的類。


如果您的對象以某種方式進行管理(例如通過某種持久性機制),則通常會出現管理器生成ID的情況 - 例如,從數據庫中獲取下一個ID。

相關: Jeff Atwood關於GUID (UUID) 的文章 但是,它與數據庫相關,但是從您的問題中不清楚您是否希望保留對象。

你有沒有想過使用UUID類。 您可以調用randomUUID()函數每次創建一個新的id。

還有另一種獲取唯一ID的方法。 不要使用int或其他數據類型,只需創建一個類:

final class ID
{
  @Override
  public boolean equals(Object o)
  {
     return this==o;
  }
}

public Apple
{
  final private ID id=new ID();
}

線程安全無需同步!

如何以優雅的方式使用 Java8 返回 map<object, long> 來自列表<object>計數發生?<div id="text_translate"><p> 我知道標題很拗口,所以我將嘗試用一個例子來解釋。</p><p> 我有一個清單。 Chores 有一個 id 字段作為標識符,但列表將包含許多家務,其中一些將具有相同的 ID。 我的目標是返回一個 Map&lt;Chore, Long&gt; ,其中 long 將計算雜務的出現次數。 例如:</p><pre> List&lt;Chore&gt; choreList = new ArrayList&lt;Chore&gt;(); choreList.add(new Chore("1", "vacuum", "7-6-22"); //Numbers 1,2,3 are the ID's for each chore choreList.add(new Chore("2", "dusting", "7-1-22"); choreList.add(new Chore("3", "mowing", "7-15-22"); choreList.add(new Chore("1", "vacuum", "7-14-22"); choreList.add(new Chore("1", "vacuum", "7-18-22"); choreList.add(new Chore("2", "dusting", "7-24-22");</pre><p> 使用此列表和 Java8 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ function,我想返回一個 Map&lt;Chore, Long&gt;,其中包含家務 object 和事件。 因此,對於 ID 為“1”的雜項,長為 3。對於 ID 為“2”的雜項,長為 2……等等。</p><p> 我試圖為此找到一個優雅的解決方案,但看起來每個人都可以得到如下內容:</p><pre> Map&lt;String, Long&gt; choresById = chores.stream().collect(Collectors.groupingBy(Chore::getId, Collectors.counting()));</pre><p> 我怎樣才能想出 Map&lt;Chore, Long&gt; 而不是 Map&lt;String, Long&gt; (在這種情況下,字符串是 ID?)</p></div></object></object,>

[英]How to use Java8 in an elegant way to return a map of <Object, Long> from a List<Object> counting occurrence?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Java 如果 Number 是 null,是否有任何優雅的方法可以為 Number 分配默認值 在Java中進行對象到對象轉換的簡單/優雅方法? 在Java中從向量添加不同對象的最優雅方法 更好地為Java中的對象數組賦值 在Java中轉義$的最優雅方法 如何以優雅的方式使用 Java8 返回 map<object, long> 來自列表<object>計數發生?<div id="text_translate"><p> 我知道標題很拗口,所以我將嘗試用一個例子來解釋。</p><p> 我有一個清單。 Chores 有一個 id 字段作為標識符,但列表將包含許多家務,其中一些將具有相同的 ID。 我的目標是返回一個 Map&lt;Chore, Long&gt; ,其中 long 將計算雜務的出現次數。 例如:</p><pre> List&lt;Chore&gt; choreList = new ArrayList&lt;Chore&gt;(); choreList.add(new Chore("1", "vacuum", "7-6-22"); //Numbers 1,2,3 are the ID's for each chore choreList.add(new Chore("2", "dusting", "7-1-22"); choreList.add(new Chore("3", "mowing", "7-15-22"); choreList.add(new Chore("1", "vacuum", "7-14-22"); choreList.add(new Chore("1", "vacuum", "7-18-22"); choreList.add(new Chore("2", "dusting", "7-24-22");</pre><p> 使用此列表和 Java8 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ function,我想返回一個 Map&lt;Chore, Long&gt;,其中包含家務 object 和事件。 因此,對於 ID 為“1”的雜項,長為 3。對於 ID 為“2”的雜項,長為 2……等等。</p><p> 我試圖為此找到一個優雅的解決方案,但看起來每個人都可以得到如下內容:</p><pre> Map&lt;String, Long&gt; choresById = chores.stream().collect(Collectors.groupingBy(Chore::getId, Collectors.counting()));</pre><p> 我怎樣才能想出 Map&lt;Chore, Long&gt; 而不是 Map&lt;String, Long&gt; (在這種情況下,字符串是 ID?)</p></div></object></object,> 在抽象類上實現ID的一種優雅方法 Hamcrest - 測試具有相同屬性值的復雜對象的優雅方式 是否有一種優雅的方式來展開包裝在2個嵌套的Optionals中的對象? 用FilterInputStream對象讀取大數據的一種優雅方法
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM