ArrayList
ArrayList 常用方法
- boolean add(E e): 将指定元素添加到列表尾部
- void add(int index, E e): 将指定元素插入此列表中指定位置
- boolean addAll(Collection c): 按照指定 collection 的迭代器所返回的元素顺序,将该collection中所有的元素添加到此列表尾部
- boolean addAll(int index, Collection c): 从指定的位置开始,将指定 collection 中的所有元素插入到此列表中
- void clear(): 移除此列表中的所有元素。
- Object clone(): 返回此 ArrayList 实例的浅表副本。
- boolean contains(Object o): 如果此列表中包含指定的元素,则返回 true。
- E get(int index): 返回此列表中指定位置上的元素。
- int indexOf(Object o): 返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
- boolean isEmpty(): 如果此列表中没有元素,则返回 true
- int lastIndexOf(Object o): 返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
- E remove(int index): 移除此列表中指定位置上的元素。
- boolean remove(Object o): 移除此列表中首次出现的指定元素(如果存在)。
- protected void removeRange(int fromIndex, int toIndex): 移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。
- E set(int index, E element): 用指定的元素替代此列表中指定位置上的元素。
- int size(): 返回此列表中的元素数。
- Object[] toArray(): 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
- T[] toArray(T[] a): 按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
- void trimToSize(): 将此 ArrayList 实例的容量调整为列表的当前大小。
- Arrays.asList("A", "B", "C", ...): 将数组转换为集合
stream
1.遍历(forEach)
传统写法:
java
for (String s : list) {
System.out.println(s);
}Stream:
java
list.stream().forEach(System.out::println);2.过滤(fillter)
找出长度大于3的名字:
java
List<String> result = list.stream()
.filter(s -> s.length() > 3) // 过滤
.toList(); // 转回数组3.转换(map)
全部转大写
java
List<String> result = list.stream()
.map(String::toUpperCase)
.toList();4.去重(distinct)
java
List<String> result = list.stream()
.distinct()
.toList();5.排序(sorted)
升序:
java
List<String> result = list.stream()
.sorted()
.toList();降序:
java
List<String> result = list.stream()
.sorted(Comparator.reverseOrder())
.toList();6.限制数量(limit)
取前3个:
java
List<String> result = list.stream()
.limit(3)
.toList();7.跳过前N个(skip)
java
List<String> result = list.stream()
.skip(2)
.toList();8.查找第一个(findFirst)
java
Optional<String> first =
list.stream()
.findFirst();
// 取值:
first.ifPresent(System.out::println);9.判断是否存在(anyMatch)
判断是否存在Tom
java
boolean exist = list.stream()
.anyMatch("Tom"::equals);10.是否全部满足(allMatch)
java
boolean allMatch = list.stream()
.allMatch(s -> s.length() > 3);11.是否全部不满足(noneMatch)
java
boolean result = list.stream()
.noneMatch("Admin"::equals);12.统计数量(count)
java
long count = list.stream()
.filter("Tom"::equals)
.count();13.求和
java
int sum = nums.stream()
.mapToInt(Integer::intValue)
.sum();14.最大值/最小值
最大值:
java
int max = nums.stream()
.mapToInt(Integer::intValue)
.max()
.orElse(0);最小值:
java
int min = nums.stream()
.mapToInt(Integer::intValue)
.min()
.orElse(0);15.Collect 转 List
java
List<String> result = list.stream()
.filter(s -> s.length() > 3)
.collect(Collectors.toList());Java 16+:
java
.toList()即可。
16.转Set
java
Set<String> set = list.stream()
.collect(Collectors.toSet());自动去重。
17.字符串拼接
java
String result = list.stream()
.collect(Collectors.joining(","));18.分组(groupingBy)
统计名字出现次数:
java
Map<String, Long> map =
list.stream()
.collect(
Collectors.groupingBy(
s -> s,
Collectors.counting()
)
);19.转Map
假设:
java
class User {
private Long id;
private String name;
}java
Map<Long, User> map =
users.stream()
.collect(
Collectors.toMap(
User::getId,
Function.identity()
)
);等价于:
java
Map<Long, User> map = new HashMap<>();
for (User user : users) {
map.put(user.getId(), user);
}结果:
java
1 -> User
2 -> User
3 -> User19.转Map<List>
以id为key:
java
Map<Long, List<User>> map =
users.stream()
.collect(
Collectors.groupingBy(
User::getId
)
);以 id + '-' + name 为key:
java
Map<String, List<User>> map =
users.stream()
.collect(
Collectors.groupingBy(
user -> user.getId() + "-" + user.getName()
)
);