小编Fra*_*eau的帖子

我应该如何使用Guava的Hashing#consistentHash?

我正在研究在我正在编写的一些java代码中使用一致的哈希算法.番石榴哈希库有一个consistentHash(HashCode, int)方法,但文档相当缺乏.我最初的希望是,我可以使用consistentHash()简单的会话亲和性来有效地在一组后端服务器上分配负载.

有没有人有一个如何使用这种方法的现实世界的例子?特别是我关心的是管理从目标范围中移除铲斗.

例如:

@Test
public void testConsistentHash() {
    List<String> servers = Lists.newArrayList("server1", "server2", "server3", "server4", "server5");

    int bucket = Hashing.consistentHash(Hashing.md5().hashString("someId"), servers.size());
    System.out.println("First time routed to: " + servers.get(bucket));

    // one of the back end servers is removed from the (middle of the) pool
    servers.remove(1);

    bucket = Hashing.consistentHash(Hashing.md5().hashString("blah"), servers.size());
    System.out.println("Second time routed to: " + servers.get(bucket));
}
Run Code Online (Sandbox Code Playgroud)

导致输出:

First time routed to: server4
Second time routed to: server5

我想要的是在清除列表中较早的服务器之后将该标识符("someId")映射到同一服务器.所以在上面的示例中,删除后我想我想要桶0映射到"server1",桶1映射到"server3",桶2映射到"server4",桶3映射到"server5".

我是否应该维护一个单独的(比列表更复杂)数据结构来管理存储桶删除和添加?我想我可能已经设想了一个更复杂的Hashing API,可以在为我添加和删除特定存储桶后管理重新映射.

注意: …

java guava consistent-hashing

22
推荐指数
1
解决办法
8241
查看次数

使用对象的字段过滤ArrayList

我有一个由Objects填充的ArrayList.

我调用的对象类Article有两个字段;

public class Article {

    private int codeArt;
    private String desArt;

  public Article(int aInt, String string) {
        this.desArt = string;
        this.codeArt = aInt;
    }

    public int getCodeArt() {return codeArt; }
    public void setCodeArt(int codeArt) {this.codeArt = codeArt;}
    public String getDesArt() {return desArt;}
    public void setDesArt(String desArt) { this.desArt = desArt;}

}
Run Code Online (Sandbox Code Playgroud)

我想使用该desArt字段过滤我的List ,对于测试我使用了字符串"test".

我使用谷歌的Guava,它允许我过滤ArrayList.

这是我试过的代码:

private List<gestionstock.Article> listArticles = new ArrayList<>();

//Here the I've filled my ArrayList

private List<gestionstock.Article> filteredList filteredList = Lists.newArrayList(Collections2.filter(listArticles, Predicates.containsPattern("test")));
Run Code Online (Sandbox Code Playgroud)

但是这段代码不起作用.

java filtering arraylist guava

15
推荐指数
3
解决办法
6万
查看次数

在Google集合中静态初始化Maps的最佳方法

静态初始化可修改地图的最佳方法是什么?我发现只

ImmutableMap.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
Run Code Online (Sandbox Code Playgroud)

但是这种方式创建了不可变映射并包含固定的参数列表.

java guava

11
推荐指数
1
解决办法
2万
查看次数

使用两种不同类型的Guava ListenableFutures的结果

我有两个在其他线程上完成的ListenableFutures.每个未来都是不同的类型,我希望在它们完整时使用它们的两个结果.

有没有一种优雅的方式来处理这个使用番石榴?

java future guava

11
推荐指数
2
解决办法
5407
查看次数

Guava的TypeToken可以获得通用字段的特定类型吗?

我为一个名为ASN.1的文件格式编写了一个解析器,它使用Guice TypeLiteral.getFieldType(Field)将通用字段转换为特定的Java类型,因此我可以构造正确的类型(类似于Jackson或GSON数据绑定).但由于我已经依赖Guava并且它似乎有一个新的TypeLiteral替代品,我想改为使用TypeToken.根据Guave TypeToken文档:

TypeToken类似于Guice的TypeLiteral类,但有一个重要的区别:它支持非实现类型,如T,List<T>甚至List<? extends Number>; 而TypeLiteral不是.TypeToken也是可序列化的,并提供了许多额外的实用方法.

你能用一个字段的具体类型TypeToken吗?换句话说,我怎样才能在番石榴中做到以下几点?

import org.junit.Test;
import com.google.inject.TypeLiteral;
public class FieldTypeTest {
    public static class A<T> {
        T a;
    }
    public static class B {
        A<String> b;
    }

    @Test
    public void testTypeToken() throws SecurityException, NoSuchFieldException {
        TypeLiteral<?> reifiedA = TypeLiteral.get(B.class).getFieldType(B.class.getDeclaredField("b"));
        assertEquals(String.class, reifiedA.getFieldType(reifiedA.getRawType().getDeclaredField("a")).getRawType());
    }
}
Run Code Online (Sandbox Code Playgroud)

java guava

6
推荐指数
1
解决办法
3171
查看次数

Google Guava并发中Futures.addCallBack()和Futures.transform()之间的区别

是什么区别Futures.addCallBack(),并Futures.transform()谷歌番石榴并发.

根据文件:

Futures.addCallBack():
addCallback(ListenableFuture<V> future, FutureCallback<? super V> callback)在Future的计算完成时,或者如果计算已经完成,立即注册单独的成功和失败回调.

Futures.transform():
transform(ListenableFuture<I> input, AsyncFunction<? super I,? extends O> function)返回一个新的ListenableFuture,其结果是从给定Future的结果异步派生的.

根据我的理解,addCallback()将在异步处理完成时注册成功或失败回调.在这种情况下,我们可以根据成功或失败条件处理输出(例如:日志记录,流量控制等.).并且transform()只返回异步对象.那么差异只是Callback?

  1. 我的理解是否正确?
  2. 哪个是异步处理最好的?
  3. 如果我需要在序列中调用多个异步方法,那么有什么最佳实践吗?
  4. 使用AsyncFunctionFunctionin有transform(ListenableFuture<I> input, Function/AsyncFunction <? super I,? extends O> function)什么区别?(AsyncFunction仅用于嵌套Futures.transform()?)

我尝试了什么:
我尝试编写如下代码,这是否是一个好习惯.

public ListenableFuture<MyObject> doSomething() {
    logger.info( "Entered in dosomething() Method." );  

    ListeningExecutorService executor =
            MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(50));

    ListenableFuture<MyObject> myAsyncObject =
            calculator.calculateSomething(input);
    //internally calculator.calculateSomething() have multiple asynchronous
    // calls …
Run Code Online (Sandbox Code Playgroud)

java concurrency asynchronous guava

5
推荐指数
1
解决办法
9208
查看次数

在类中删除此对象

private class Node
{
    Item name;
    Node next;

    public void deleteObject()
    {
        this = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以删除类中的对象?我试图在上面做,但它给出了一个错误,左侧应该是一个变量. Node是内在阶级.谢谢.

编辑: var1并且var2引用了这个类的对象,当我var1通过执行删除时var1 = null,我希望它var2也会被删除.

java class

4
推荐指数
1
解决办法
3871
查看次数

使用变量在密码中创建关系?

我正在尝试动态地创建节点之间的关系.我遇到的问题是我无法使用变量来指定关系类型.

例如,我有数据:

{
    nodes: [
        {
             "name":"Node1"
        },
        ...
    ],
    relationships: [
        {
             "sourceNode": "Node1",
             "destinationNode": "Node2",
             "relationshipType": "FRIEND"
        },
        ...
    ]
}
Run Code Online (Sandbox Code Playgroud)

假设已创建所有节点.

我现在想要在类型的节点之间创建关系relationshipType.

我试着这样做:

WITH {json} AS document
UNWIND document.relationships AS relationship
MATCH (pdt:Node {name: relationship.sourceNode})
MATCH (cdt:Node {name: relationship.destinationNode})
CREATE (pdt)-[r:relationship.relationshipType]->(cdt)
RETURN pdt.name,type(r),cdt.name
Run Code Online (Sandbox Code Playgroud)

然而它很糟糕,[r:relationship.relationshipType]因为它期待一个明确的类型[r:CHILD].

是否可以使用变量来设置关系类型?

neo4j cypher

4
推荐指数
1
解决办法
1375
查看次数

这个准备好的声明我做错了什么?

private Connection conn = DriverManager.getConnection(URL, info);
try {
String sql = "INSERT INTO \"STUD1582251\".\"ACCOUNTS\" VALUES USERNAME=?, PASSWORD=?, PORTFOLIONAME=?";
    PreparedStatement stm = conn.prepareStatement(sql);
    stm.setString(1, user.getUsername());
    stm.setString(2, user.getPassword());
    stm.setString(3, user.getPortfolioName());
    System.out.println(sql);
    stm.executeUpdate();
} catch (SQLException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

例外

SELECT username FROM"STUD1582251"."ACCOUNTS"WHERE username =?插入"STUD1582251"."帐户"值USERNAME =?,PASSWORD = ?, PORTFOLIONAME =?java.sql.SQLSyntaxErrorException:ORA-00933:SQL命令未正确结束

java sql oracle prepared-statement

3
推荐指数
1
解决办法
383
查看次数

Neo4j使用带有空值的MERGE

我知道这个问题之前已被问过几次,但答案并没有解决我的问题.我正在尝试执行此查询:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///C:/Users/Zona5/Documents/Neo4j/checkIntel/import/personaldata.csv' AS line1
MERGE (a:Address1 {address_name1:line1.address1})
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:Cannot merge node using null property value for address_name1.

其他人建议使用:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM
'file:///C:/Users/Zona5/Documents/Neo4j/checkIntel/import/personaldata.csv' AS line1
MERGE (a:Address1)
 ON CREATE SET a.address_name1=line1.address1
 ON MATCH SET a.address_name1=line1.address1
Run Code Online (Sandbox Code Playgroud)

但是,如果节点具有多个属性,则此解决方案有效.就我而言,它只有address_name1财产.

有没有办法解决这个问题,比如在查询MERGE或其他解决方案之前用查询中的单词替换空值?

csv null neo4j cypher

3
推荐指数
2
解决办法
3220
查看次数

如何在iOS Swift中将角半径设置为UIImage而不是UIImageView

谁能帮我...!我只想为图像设置拐角半径,并且图像也必须适合AspectFit比例尺。

如果我给scaleToFill模式,我可以使用下面的代码及其工作正常。但是图像被拉伸了。

self.productImg.layer.cornerRadius = 7
self.productImg.clipsToBounds = true
Run Code Online (Sandbox Code Playgroud)

但是,将比例尺给AspectFit时,如下图所示。

显示的绿色是图像视图,在该图像中图像设置为AspectFit。

实际形象

实际图像

提供AspectFit模式时的图像

提供AspectFit模式时的图像

我需要图像,因为它实际上是给定的,并且还必须具有拐角半径。因此,请任何人给我解决方案以解决此问题。

提前致谢...!

image cornerradius uiimageview ios swift

1
推荐指数
1
解决办法
1303
查看次数