import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.google.common.base.Function;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
class Goods {
private Integer id;
private Integer groupId;
private String name;
public String toString() {
return "{id="+id + ", groupId=" + groupId + ", name=" + name + "}";
}
}
public class TxAspect {
public static void main(String[] args) {
List<Goods> list = new ArrayList<>();
{
Goods e = new Goods();
e.setId(1);
e.setGroupId(1);
e.setName("商品1");
list.add(e);
}
{
Goods e = new Goods();
e.setId(3);
e.setGroupId(3);
e.setName("商品3");
list.add(e);
}
{
Goods e = new Goods();
e.setId(4);
e.setGroupId(2);
e.setName("商品4");
list.add(e);
}
{
Goods e = new Goods();
e.setId(5);
e.setName("商品5");
list.add(e);
}
{
Goods e = new Goods();
e.setId(2);
e.setGroupId(2);
e.setName("商品2");
list.add(e);
}
//根据groupId分组, 如果groupId为null, 则放到默认为0的group下
Function<Goods, Integer> fun = new Function<Goods, Integer>() {
@Override
public Integer apply(Goods input) {
if (input.getGroupId() == null) {
return 0;
}
return input.getGroupId();
}
};
Multimap<Integer, Goods> index = Multimaps.index(list, fun);
Map<Integer, Collection<Goods>> map = index.asMap();
for (Map.Entry<Integer, Collection<Goods>> entry : map.entrySet()) {
System.out.println(entry.getKey() + " <---> " + entry.getValue());
}
}
}
分享到:
相关推荐
总的来说,Guava通过`GroupingBy`、`Multiset`和`Multimap`为Java程序员提供了强大而灵活的集合分组功能。理解并熟练运用这些工具,能够大大提高我们的代码效率和可读性,使我们在处理复杂数据结构时更加得心应手。
Guava是Google的一个开源库,广泛应用于各种Java项目,其提供了许多实用的集合类、缓存机制、并发工具等。在Java 8中,Stream API的引入改变了处理集合的方式,允许进行声明式编程,而GuavaCollectors则进一步丰富了...
2. **富集合API**:GS Collections提供了许多增强的集合操作,如`select`(过滤)、`reject`(排除)、`collect`(转换)、`groupingBy`(分组)、`zip`(对齐合并)等,这些方法使得代码更加简洁、易读。...
在这种情况下,可以考虑使用更高效的数据结构,如Guava库提供的Multimap,或者Java 8引入的Stream API进行分组操作。 在使用Stream API进行分组时,代码会变得更加简洁和高效: ```java Map, List<SkuVo>> ...
2. **Guava**:Google提供的Guava库也包含了丰富的工具类,它扩展了Java集合框架,提供了如Multiset、Multimap等高级数据结构,还有如Preconditions、Strings、Charsets等实用工具类。 3. **Java Util**:Java标准...
3. **集合工具类**:提供对Java集合框架(如List、Set、Map)的辅助操作,如快速排序、过滤、映射、分组等,便于进行数据处理和转换。 4. **IO工具类**:简化文件和流的读写操作,可能包括文件的复制、删除、重命名...
8. **guava-*.jar**:Google的Guava库提供了一套广泛使用的Java工具类,包括集合、缓存、并发工具、I/O操作等,有助于提高代码质量和效率。 9. **其他依赖库**:可能还有其他与数据库访问、加密、线程管理等相关的...
这里的Stream API首先通过`.stream()`将集合转换为Stream,然后使用`.filter()`方法筛选出价格大于1000的交易,最后通过`.collect()`和`Collectors.groupingBy()`进行分组。这种方式避免了频繁的map访问和手动列表...
在Java中,可以使用`HashMap`或`HashSet`来去重数据,使用`ArrayList`或`LinkedList`进行数据存储,而`Stream` API则可以方便地进行集合操作,如过滤、分组和聚合。此外,Apache Commons Lang、Guava等库提供了丰富...
这可以通过Java的集合类或第三方库如Guava的Cache来实现。如果数据量庞大,可以考虑分页加载或按需加载。 4. **事件监听**:当用户选择城市时,需要监听选择事件。Java GUI组件提供了各种事件监听器,如...
Sage软件集合了大量开源数学软件包,如Maxima、Pynac、SymPy、Singular、GAP、R、Pari、SciPy和libcrypt等,其中libcrypt是用于密码学计算的库。Sage的设计基于主流编程语言Python,它提供了一个统一的界面,允许...
在Java环境下实现FastEgoClustering算法,可以利用Java的强大库支持,如JUNG(Java Universal Network/Graph Framework)用于图形操作,Apache Commons Math库进行数学计算,以及Google Guava库提供高效的集合操作。...
4. **数据清洗**:此步骤包括去除无效、重复或不一致的数据,这可能需要使用到数据处理库,如 Apache Commons Lang 或 Guava,来实现字符串操作和集合处理。 5. **数据结构与算法**:为了高效地处理大量数据,可能...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...
BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。 异步输出框架 AsynWriter 一个Java的类库,用于异步输出记录的简单小框架用于高并发下数据输出使用...