import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class DataDistributionExample {
public static void main(String[] args) {
// 假设这是原始数据集合,元素是任意类型
List<String> dataList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
dataList.add("User" + i);
}
// 按照小明(30%)、小红(40%)、小张(30%)的比例分配
Map<String, Double> distributionMap = new HashMap<>();
distributionMap.put("小明", 0.3);
distributionMap.put("小红", 0.4);
distributionMap.put("小张", 0.3);
Collections.shuffle(dataList); // 首先对数据进行随机打乱
int totalDataCount = dataList.size();
int countForXiaoming = (int) Math.round(totalDataCount * distributionMap.get("小明"));
int countForXiaohong = (int) Math.round(totalDataCount * distributionMap.get("小红"));
List<String> resultForXiaoming = new ArrayList<>();
List<String> resultForXiaohong = new ArrayList<>();
List<String> resultForXiaozhang = new ArrayList<>();
for (int i = 0; i < totalDataCount; i++) {
if (i < countForXiaoming) {
resultForXiaoming.add(dataList.remove(0));
} else if (i < countForXiaoming + countForXiaohong) {
resultForXiaohong.add(dataList.remove(0));
} else {
resultForXiaozhang.add(dataList.remove(0));
}
}
System.out.println("小明的数据: " + resultForXiaoming);
System.out.println("小红的数据: " + resultForXiaohong);
System.out.println("小张的数据: " + resultForXiaozhang);
System.out.println("================================");
t001();
}
static void t001() {
// 原始数据列表,包含1到100的整数
List<Integer> originalList = IntStream.rangeClosed(1, 100).boxed().collect(Collectors.toList());
// 小明、张工对应的数字范围
int xiaomingEnd = (int) (originalList.size() * 0.3);
int zhanggongEnd = xiaomingEnd + (int) (originalList.size() * 0.3);
// 使用HashSet存储已抽取的元素以避免重复
Set<Integer> sampledSet = new HashSet<>();
// 抽取小明的数据
List<Integer> xiaomingData = originalList.subList(0, xiaomingEnd)
.stream()
.distinct()
.filter(sampledSet::add)
.collect(Collectors.toList());
// 抽取张工的数据
List<Integer> zhanggongData = originalList.subList(xiaomingEnd, zhanggongEnd)
.stream()
.distinct()
.filter(sampledSet::add)
.collect(Collectors.toList());
// 抽取其他人的数据,由于这里每个人对应一个数字,所以直接从剩余部分中获取
List<Integer> othersData = originalList.subList(zhanggongEnd, originalList.size())
.stream()
.distinct()
.filter(sampledSet::add)
.collect(Collectors.toList());
System.out.println(xiaomingData+"\n"+zhanggongData+"\n"+othersData);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/200891.html