程序员蜗牛
1 year ago
10 changed files with 330 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
<parent> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-parent</artifactId> |
|||
<version>2.2.2.RELEASE</version> |
|||
<relativePath/> <!-- lookup parent from repository --> |
|||
</parent> |
|||
<groupId>org.example</groupId> |
|||
<artifactId>lambdatest</artifactId> |
|||
<version>1.0-SNAPSHOT</version> |
|||
|
|||
<dependencies> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-test</artifactId> |
|||
<scope>test</scope> |
|||
<exclusions> |
|||
<exclusion> |
|||
<groupId>org.junit.vintage</groupId> |
|||
<artifactId>junit-vintage-engine</artifactId> |
|||
</exclusion> |
|||
</exclusions> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>com.google.guava</groupId> |
|||
<artifactId>guava</artifactId> |
|||
<version>32.1.3-jre</version> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.projectlombok</groupId> |
|||
<artifactId>lombok</artifactId> |
|||
<scope>provided</scope> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>com.alibaba</groupId> |
|||
<artifactId>fastjson</artifactId> |
|||
<version>1.2.60</version> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>junit</groupId> |
|||
<artifactId>junit</artifactId> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
</project> |
@ -0,0 +1,29 @@ |
|||
package org.example.collectiontolist; |
|||
|
|||
|
|||
import java.util.*; |
|||
import java.util.stream.Collectors; |
|||
|
|||
public class CollectionToListOrSet { |
|||
|
|||
public static <T> List<T> toList(Collection<T> collection) { |
|||
if (collection == null) { |
|||
return new ArrayList<>(); |
|||
} |
|||
if (collection instanceof List) { |
|||
return (List<T>) collection; |
|||
} |
|||
return collection.stream().collect(Collectors.toList()); |
|||
} |
|||
|
|||
public static <T> Set<T> toSet(Collection<T> collection) { |
|||
if (collection == null) { |
|||
return new HashSet<>(); |
|||
} |
|||
if (collection instanceof Set) { |
|||
return (Set<T>) collection; |
|||
} |
|||
return collection.stream().collect(Collectors.toSet()); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,35 @@ |
|||
package org.example.collectiontolist; |
|||
|
|||
|
|||
import com.google.common.collect.Lists; |
|||
import org.example.entity.OrderItem; |
|||
import org.junit.Test; |
|||
|
|||
import java.util.List; |
|||
import java.util.Set; |
|||
|
|||
public class TestCollection { |
|||
|
|||
//将集合 Collection 转化为 List
|
|||
@Test |
|||
public void testToList() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
List<OrderItem> list = CollectionToListOrSet.toList(orderItems); |
|||
} |
|||
|
|||
//将集合 Collection 转化为 Set
|
|||
@Test |
|||
public void testToSet() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
Set<OrderItem> set = CollectionToListOrSet.toSet(orderItems); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,39 @@ |
|||
package org.example.collectiontomap; |
|||
|
|||
import org.springframework.util.CollectionUtils; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
import java.util.function.BinaryOperator; |
|||
import java.util.function.Function; |
|||
import java.util.stream.Collectors; |
|||
|
|||
|
|||
// Collection 转化为 Map
|
|||
public class CollectionToMap { |
|||
public static <T, K> Map<K, T> toMap(Collection<T> collection, Function<? super T, ? extends K> keyMapper) { |
|||
return toMap(collection, keyMapper, Function.identity()); |
|||
} |
|||
|
|||
public static <T, K, V> Map<K, V> toMap(Collection<T> collection, Function<? super T, ? extends K> keyFunction, Function<? super T, ? extends V> valueFunction) { |
|||
return toMap(collection, keyFunction, valueFunction, pickSecond()); |
|||
} |
|||
|
|||
public static <T, K, V> Map<K, V> toMap(Collection<T> collection, Function<? super T, ? extends K> keyFunction, Function<? super T, ? extends V> valueFunction, BinaryOperator<V> mergeFunction) { |
|||
if (CollectionUtils.isEmpty(collection)) { |
|||
return new HashMap<>(0); |
|||
} |
|||
|
|||
return collection.stream().collect(Collectors.toMap(keyFunction, valueFunction, mergeFunction)); |
|||
} |
|||
|
|||
public static <T> BinaryOperator<T> pickFirst() { |
|||
return (k1, k2) -> k1; |
|||
} |
|||
|
|||
public static <T> BinaryOperator<T> pickSecond() { |
|||
return (k1, k2) -> k2; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,33 @@ |
|||
package org.example.collectiontomap; |
|||
|
|||
import com.google.common.collect.Lists; |
|||
import org.example.entity.OrderItem; |
|||
import org.junit.Test; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
// 对Java Stream进行二次封装写的10个方法 精通lambda表达式
|
|||
public class TestCollectionToMap { |
|||
|
|||
@Test |
|||
public void testToMap() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
Map<Integer, OrderItem> map = CollectionToMap.toMap(orderItems, OrderItem::getOrderId); |
|||
} |
|||
|
|||
@Test |
|||
public void testToMapV2() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
Map<Integer, Double> map = CollectionToMap.toMap(orderItems, OrderItem::getOrderId, OrderItem::getPrice); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,12 @@ |
|||
package org.example.entity; |
|||
|
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Data; |
|||
|
|||
@Data |
|||
@AllArgsConstructor |
|||
public class OrderItem { |
|||
private int orderId; |
|||
private double price; |
|||
private String name; |
|||
} |
@ -0,0 +1,20 @@ |
|||
package org.example.listtoset; |
|||
|
|||
import java.util.Collection; |
|||
import java.util.List; |
|||
import java.util.Set; |
|||
import java.util.function.Function; |
|||
import java.util.stream.Collectors; |
|||
|
|||
public class ListToSet { |
|||
|
|||
|
|||
public static <T, R> List<R> mapToList(Collection<T> collection, Function<T, R> mapper) { |
|||
return collection.stream().map(mapper).collect(Collectors.toList()); |
|||
} |
|||
|
|||
public static <T, R> Set<R> mapToSet(Collection<T> collection, Function<T, R> mapper) { |
|||
return collection.stream().map(mapper).collect(Collectors.toSet()); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,31 @@ |
|||
package org.example.listtoset; |
|||
|
|||
import com.google.common.collect.Lists; |
|||
import org.example.entity.OrderItem; |
|||
import org.junit.Test; |
|||
|
|||
import java.util.List; |
|||
import java.util.Set; |
|||
//List、Set 类型之间的转换
|
|||
public class TestListToSet { |
|||
@Test |
|||
public void testMapToList2() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
List<Integer> orderIds = ListToSet.mapToList(orderItems, (item) -> item.getOrderId()); |
|||
} |
|||
|
|||
@Test |
|||
public void testMapToSetV2() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
Set<Integer> orderIds = ListToSet.mapToSet(orderItems, (item) -> item.getOrderId()); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,42 @@ |
|||
package org.example.maptovalue; |
|||
|
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
import java.util.function.BiFunction; |
|||
import java.util.function.BinaryOperator; |
|||
import java.util.stream.Collectors; |
|||
|
|||
|
|||
public class MapToValue { |
|||
|
|||
public static <K, V, C> Map<K, C> convertMapValue(Map<K, V> map, |
|||
BiFunction<K, V, C> valueFunction, |
|||
BinaryOperator<C> mergeFunction) { |
|||
if (isEmpty(map)) { |
|||
return new HashMap<>(); |
|||
} |
|||
return map.entrySet().stream().collect(Collectors.toMap( |
|||
e -> e.getKey(), |
|||
e -> valueFunction.apply(e.getKey(), e.getValue()), |
|||
mergeFunction |
|||
)); |
|||
} |
|||
|
|||
private static <K, V> boolean isEmpty(Map<K,V> map) { |
|||
return map == null || map.isEmpty(); |
|||
} |
|||
|
|||
public static <K, V, C> Map<K, C> convertMapValue(Map<K, V> originMap, BiFunction<K, V, C> valueConverter) { |
|||
return convertMapValue(originMap, valueConverter, MapToValue.pickSecond()); |
|||
} |
|||
|
|||
public static <T> BinaryOperator<T> pickFirst() { |
|||
return (k1, k2) -> k1; |
|||
} |
|||
|
|||
public static <T> BinaryOperator<T> pickSecond() { |
|||
return (k1, k2) -> k2; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,32 @@ |
|||
package org.example.maptovalue; |
|||
|
|||
|
|||
import com.google.common.collect.Lists; |
|||
import org.example.collectiontomap.CollectionToMap; |
|||
import org.example.entity.OrderItem; |
|||
import org.junit.Test; |
|||
|
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* Map格式转换 |
|||
* 转换 Map 的 Value |
|||
* 将 Map<Long, OrderItem> 中的value 转化为 Map<Long, Double> |
|||
* value 转化时,lamada表达式可以使用(v)->{}, 也可以使用 (k,v)->{ }。 |
|||
*/ |
|||
public class TestMapToValue { |
|||
|
|||
@Test |
|||
public void testConvertValue() { |
|||
List<OrderItem> orderItems = Lists.newArrayList( |
|||
new OrderItem(1, 5d, "手表"), |
|||
new OrderItem(2, 6d, "机器人"), |
|||
new OrderItem(3, 8d, "手机") |
|||
); |
|||
Map<Integer, OrderItem> map = CollectionToMap.toMap(orderItems, OrderItem::getOrderId); |
|||
Map<Integer, String> convertMap = MapToValue.convertMapValue(map, (id, item) -> id + item.getName()); |
|||
|
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue