如果我有以下列表:
List<String> list = Arrays.asList("hello", "world", "hello");
并应用以下(Java8):
list.stream().distinct().collect(Collectors.toString());
然后我会得到一个带有“Hello”和“World”的列表。
public class Point {
float x;
float y;
//getters and setters omitted
}
HashingStrategy是您正在寻找的概念。它是一个策略接口,允许您定义equals和hashcode的自定义实现。
public interface HashingStrategy<E>
{
int computeHashCode(E object);
boolean equals(E object1, E object2);
}
流不支持散列策略,但Eclipse集合支持。它具有支持哈希策略的集和映射,以及采用哈希策略的distince()
等方法的重载。
这将很好地适用于字符串。例如,下面是我们如何获得忽略大小写的所有不同字符串。
MutableList<String> strings = Lists.mutable.with("Hello", "world", "HELLO", "World");
assertThat(
strings.distinct(HashingStrategies.fromFunction(String::toLowerCase)),
is(equalTo(Lists.immutable.with("Hello", "world"))));
HashingStrategy<String> caseInsensitive = new HashingStrategy<String>()
{
@Override
public int computeHashCode(String string)
{
int hashCode = 0;
for (int i = 0; i < string.length(); i++)
{
hashCode = 31 * hashCode + Character.toLowerCase(string.charAt(i));
}
return hashCode;
}
@Override
public boolean equals(String string1, String string2)
{
return string1.equalsIgnoreCase(string2);
}
};
assertThat(
strings.distinct(caseInsensitive),
is(equalTo(Lists.immutable.with("Hello", "world"))));
在我的PriorityQueue中,我有两种类型的客户,即VIP和常规客户。我想先为贵宾服务,再为常客服务。 如果CustomerID<100,则视为VIP。 如果客户是VIP,他会排在队列中VIP部分的最后 更新:我不想排序任何其他列除了VIP。我不想添加“日期”,因为它感觉像是一个黑客,而不是理解Java是如何工作的。
问题内容: 如果我正在从文本中扫描 //我想将行中的下一个char与 // 像这样: 我知道那不存在,但是在这种情况下可以使用任何类似的东西吗? 问题答案: 您的代码将类似于… 请注意,在调用之后,实际上已获取了该值,因此,如果您想进一步使用它,最好保留该变量,例如:
问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序
问题内容: 我想用自定义排序顺序在Java中创建一个。字符串排序的键需要根据第二个字符进行排序。这些值也是字符串。 样本图: 问题答案: 您可以像这样使用自定义比较器: 样品: 请注意,这只是假设字符在索引1处有一个字符。 另外,您也可以使用以下比较: 通常,此减法“技巧”是无效的,但在这里可以正常使用,因为减法2 不会溢出。 不过,上面的and 解决方案更具可读性。
问题内容: 我已经实现了一个图形。我想针对顶点 的度对给定的顶点子集进行排序。因此,我编写了一个名为的自定义比较器 . So, which one of the below is more efficient? Using Using 注意,第二种方法不是函数,而是单行代码。 凭直觉,我宁愿选择第二个。但是我不确定它是否更有效。 问题答案: Java API包含许多Collection和Map实现
让我们假设我有一个类,它不实现,还有一个类,它实现。 使用AssertJ的fluent API,我现在假设可以执行以下操作: 由于不实现可比,将返回类型,并且由于也返回,所以我无法访问和方法,这些方法在接口中声明。 'only'返回而不返回有什么原因吗? 当然,我可以按照的内容重写上面的断言,但是表达式本身并不特别易读,而且如果出现故障,生成的消息('expected:<-1>大于:<0>)不会提